我正在尝试让我的Windows窗体将google.dk加载到我的webBrowser元素中,然后填写“Frederik”,然后按搜索。
我已将填充+搜索操作绑定到一个按钮,以下是发生的情况:在第一次单击时,它在搜索字段中键入“Frederik”,但是我必须再次按下它实际上搜索。我想通过一个按钮进行一次操作,而不是按两次相同的按钮(我不明白为什么它需要两次点击,这关系到我。
这是我的代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("www.google.dk");
}
private void button1_Click(object sender, EventArgs e)
{
Search();
while (webBrowser1.IsBusy)
{
}
Submit();
}
private void Search()
{
webBrowser1.Document.GetElementById("lst-ib").InnerText = "Frederik";
}
private void Submit()
{
webBrowser1.Document.GetElementById("btnK").InvokeMember("click");
}
}
答案 0 :(得分:0)
而不是你的操作,你可以这样做:
webBrowser1.Navigate("https://www.google.dk/search?q=Frederik");
答案 1 :(得分:0)
您可以使用q
参数并将其设置为搜索字符串。
如果您已经知道并想要模仿用户输入并按下搜索按钮,则可以尝试以下操作:
webBrowser1.Document.InvokeScript("eval", new[] { "document.getElementsByName(\"btnK\")[0].click()"});
删除按钮内的while循环,然后单击并处理BrowserDocumentCompleted
您不需要设置计时器,也不需要拆分搜索和提交功能。
用于操作文档的Web浏览器函数不是异步的,将连续执行。
你的代码应该是这样的:
public partial class Form1 : Form
{
private static bool _isDocumentLoaded;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
_isDocumentLoaded = false;
webBrowser1.DocumentCompleted += WebBrowserDocumentCompleted;
webBrowser1.Navigate("www.google.com");
}
private void WebBrowserDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
return;
_isDocumentLoaded = true;
MessageBox.Show("Webpage loaded successfully");
}
private void button1_Click(object sender, EventArgs e)
{
if (_isDocumentLoaded)
{
FillDocumentForms();
Submit();
}
else
{
MessageBox.Show("Webpage is currently loading");
}
}
private void FillDocumentForms()
{
webBrowser1.Document?.InvokeScript("eval",
new object[] {"document.getElementById(\"lst-ib\").innerText = \"Frederik\""});
}
private void Submit()
{
webBrowser1.Document?.InvokeScript("eval", new object[] { "document.getElementsByName(\"btnK\")[0].click()" });
}
}