Я поиграл и воссоздал ваш сценарий в приложении WPF.
Я получил его с помощью события DocumentCompleted , которое
происходит после того, как браузер завершил анализ новой страницы и обновил свойство Document.
Я подписываюсь на прослушиватель событий перед навигацией и удаляю его после вызова обработчика.
Затем я вызываю первый элемент form
для отправки поиска.
(_browser.Document.GetElementsByTagName("form").First() as GeckoFormElement).submit();
Полный пример кода: приложение WPF
using Gecko;
using Gecko.DOM;
using System.Windows;
using System.Windows.Forms.Integration;
using System.Linq;
namespace GeckoWpf {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
Gecko.Xpcom.Initialize("Firefox");
}
void browser_DocumentCompleted(object sender, System.EventArgs e) {
//unsubscribe
_browser.DocumentCompleted -= browser_DocumentCompleted;
XPathResult xpathResult = _browser.Document.EvaluateXPath("//div/input");
var foundNodes = xpathResult.GetNodes();
foreach (var node in foundNodes) {
GeckoInputElement txtbox = new GeckoInputElement(node.DomObject);
txtbox.Value = "Mona Lisa"; //add the search term
}
(_browser.Document.GetElementsByTagName("form").First() as GeckoFormElement).submit();
}
WindowsFormsHost _host = new WindowsFormsHost();
GeckoWebBrowser _browser = new GeckoWebBrowser();
private void Window_Loaded(object sender, RoutedEventArgs e) {
_browser.DocumentCompleted += browser_DocumentCompleted;
_host.Child = _browser; GridWeb.Children.Add(_host);
_browser.Navigate("https://www.google.com/");
}
}
}
Примечание. Этот подход может работать не на всех страницах, поскольку DocumentComplete
может запускаться несколько раз по разным причинам (например, i / frames, AJAX и другие динамические функции).
PS: Тем не менее, ваши усилия могут или не могут быть не законными .
Возможно, вы захотите использовать вместо этого API пользовательского поиска Google или альтернативы, такие как SerpApi .