webBrowser中怎样访问一个网址后自动填写表单,可能有关多线程

blueyund 2010-06-08 12:30:25
我想要实现的功能是 webBrowser.Navigate(URL) 转到一个网页后,在填写这个网页里面的表单。
转到网页,和填写表单的功能我要是写在两个Button里面,先点Button1转到网页,再点Button2填写表单,这样没有问题。
可是我想只要点一次按钮,即把两个功能写在一个Button事件里面,这样webBrowser并不跳转网页,而是等到语句都执行完了才跳转网页,这样那个填写表单的事件就会失败,因为他需要跳转的相应页面执行完成后才能有效执行。
不是网页打开太慢的问题,我用Thread.Sleep(20000);放在两个事件之间,一点用处没有,网页就是没反应,在整个Button事件结束前,程序没有任何动作。
本以为用多线程可以解决,但是试了一晚上还是不行,不知道是我没用对多线程,还是这个功能无法实现
我试了两个事件分别用两个线程来执行,还是一样的结果。
望各位大虾赐教。。。
...全文
142 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhdwlj 2010-08-19
  • 打赏
  • 举报
回复
留个名
mngzilin 2010-06-09
  • 打赏
  • 举报
回复
private void axWebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if(axWebBrowser1.ReadyState != WebBrowserReadyState.Complete) return;

//你的操作
}
皇城龙三 2010-06-08
  • 打赏
  • 举报
回复
可以赋值的
VB codePrivate Sub Command1_Click()
Dim vDoc, vTag
Set vDoc = WebBrowser1.Document
vDoc.All("Name").Value = "654321"
vDoc.All("PSID").Value = "123456789012345678"
End Sub
mngzilin 2010-06-08
  • 打赏
  • 举报
回复
webBrowser1.Navigate(URL);
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
//然后提交表单
blueyund 2010-06-08
  • 打赏
  • 举报
回复
貌似click后webbrowser并没有马上进行页面跳转,而是先执行了一下页面内的JavaScript。故axWebBrowser1.IsBusy也是false的状态。

用判断页面内字符串长度变化来判断是否加载新页面(这个方法无法判断是否加载完成)
while (WebBrowserDocumentTextLength == axWebBrowser1.DocumentText.Length)
{
Application.DoEvents();
}

另一个方法是设一个全局变量
private bool WebBrowserClickIsComplete = false;
指示页面是否加载完
当click之后,设置WebBrowserClickIsComplete = false;
while (!WebBrowserClickIsComplete)
{
Application.DoEvents();
}
其后加入WebBrowser_DocumentCompleted的事件
private void axWebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowserClickIsComplete = true;
}
此事件触发时将变量变为true,指示页面已加载完成

这个方法可以保证页面加载完

各位大虾有更好的方法的话希望赐教,谢谢
blueyund 2010-06-08
  • 打赏
  • 举报
回复
mshtml.IHTMLElement Element1 = (mshtml.IHTMLElement)doc.getElementsByTagName("input").item("Serch", 0);

Element1.click();

可是我做了Button的click动作之后,再用
while (axWebBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}

这个没有效果页,页面还是停留在click之前的页面,axWebBrowser1.DocumentText取出来的值还是原来页面的值

望大虾解答
blueyund 2010-06-08
  • 打赏
  • 举报
回复
2楼的好像可以 哈哈哈 太高兴了 中午回来再做详细的测试 嘿嘿 谢谢啦

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧