webbrowser 模拟点击事件无效,手动点击有效

EP 2015-03-05 05:32:56
由于工作需要,要对网上的一家网站进行数据的自动化收集,于是打算写个测试原型,结果发现了存在问题。

html页面上提交按钮的源码如下:

<tr>
<th></th>
<td class="btn cf">
<span><input type="checkbox" id="rememberMe" value="true"/>记住我</span>
<a href="javascript:;" id="btn-login">登录</a>
</td>
</tr>

我的具体执行代码如下:

HtmlElement hUserId = this.webBrowser.Document.GetElementById(userId);
HtmlElement hPasswdId = this.webBrowser.Document.GetElementById(passwdId);
HtmlElement hBtnLogin = this.webBrowser.Document.GetElementById(btn_login);

hUserId.SetAttribute("Value", user);
hPasswdId.SetAttribute("Value", passwd);
hBtnLogin.InvokeMember("click");

我发现执行完后,数据都填上去了,但是没有跳转,当我点按钮的时候,他就跳了。
开始由于我对javascript不是很熟,以为是应该是走href而不是进行点击,结果还是不行。后来通过网上查,发现这个javascript其实就是不起作用,于是跟踪源码,截图如下:

我个人猜测的可能执行的是这个js中的这个函数,由于比较长,我就不贴出来了。
那么我想问,应该怎么样写才会起作用(如果贴代码就最好了),为什么用人手动点击就可以,模拟操作就不行?
...全文
807 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zslefour 2016-10-10
  • 打赏
  • 举报
回复
现在我也遇到同样的问题,不知有无大侠有好的解决办法呢?
拜一刀 2015-03-06
  • 打赏
  • 举报
回复
不懂帮顶 反正我使用按键精灵的时候,尽量先按下鼠标,稍微停顿,然后再抬起,不然各种点不中
於黾 2015-03-06
  • 打赏
  • 举报
回复
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); 分开写 先执行左键按下,再执行左键抬起,不要同时执行
EP 2015-03-06
  • 打赏
  • 举报
回复
经过我的单步调试,发现了很奇怪的现象,如果把 模拟点击连接 放在 按钮中,也就是和与 注册事件 一起,执行btnStart_Click时,它会先执行 模拟点击链接,然后 在执行 注册事件,当我第二次点击可以也是这个原因,只不过此时webBrowser上有内容,故点击就成功了,而把 模拟点击 放在 注册事件 中,发现无论如何不会跳转,请问:为什么 模拟点击 放在 注册事件中不行?还有 注册事件 是默认异步吗,怎么同步,比如说先执行完注册事件后在执行了注册下面的代码 代码还是三楼的代码
EP 2015-03-06
  • 打赏
  • 举报
回复
引用 1 楼 webdiyer 的回复:
用RaiseEvent方法呢?
我现在找到部分原因了,我重新改写了代码,直接通过SetCursorPos将鼠标设置在这个按钮(实际上是个链接)上,然后通过mouse_event 发送鼠标点击事件,然后很奇怪的事情发生了,点击按钮,第一次不会响应,而第二次点击就可以,我觉得应该是WebBrowserDocumentCompletedEventHandler出问题了,但是不清楚,希望大神给指定下,按钮代码如下

private void btnStart_Click(object sender, EventArgs e)   //点击这个会操作WebBrowser
{
    this.webBrowser.Navigate("http://epc.xxxxxx.com");
    this.webBrowser.DocumentCompleted += new 
             WebBrowserDocumentCompletedEventHandler(userLogin);  //这个只是设置了账户密码

     for (int i = 0 ; i < 120; ++i)    //测试时为了看到点击效果,所以故意多写了
     {
          SetCursorPos(745, 300);
          mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
     }
}
webdiyer 2015-03-06
  • 打赏
  • 举报
回复
用RaiseEvent方法呢?

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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