Vous pouvez faire beaucoup sans vous ruiner en produits tiers et en mshtml (i.e. interop). Utilisez le System.Windows.Forms.WebBrowser. À partir de là, vous pouvez faire des choses comme "GetElementById" sur un HtmlDocument ou "GetElementsByTagName" sur HtmlElements. Si vous voulez réellement interagir avec le navigateur (simuler des clics de bouton par exemple), vous pouvez utiliser un peu de réflexion (à mon avis un moindre mal qu'Interop) pour le faire :
var wb = new WebBrowser()
... dire au navigateur de naviguer (tangentiel à cette question). Ensuite, sur l'événement Document_Completed, vous pouvez simuler des clics comme ceci.
var doc = wb.Browser.Document
var elem = doc.GetElementById(elementId);
object obj = elem.DomElement;
System.Reflection.MethodInfo mi = obj.GetType().GetMethod("click");
mi.Invoke(obj, new object[0]);
vous pouvez faire des réflexions similaires pour soumettre des formulaires, etc.
Profitez-en.