Webbrowser模拟鼠标移动到元素上,求指点!真是没办法了。

FainSheeg 2017-12-30 01:57:33
最近要做一个爬取网页数据的程序,先用用户名密码登录然后用invokemember("click")模拟点击登录。这一步已经实现,没什么问题。登录进去后,通过分析HTML获取数据。但部分数据是需要把鼠标移动到某个标签上才会出来的,如图:需要把鼠标移到“查看”标签上才会出来。体现在HTML上就是这个标签的innertext会有内容出来。我首先定位到“查看”标签,然后用了好多方法都没法模拟出来。

Dim row As HtmlElementCollection = Web.Document.GetElementById("table").GetElementsByTagName("tr")(1).Children
row(11).FirstChild.InvokeMember("mouseover")
row(11).FirstChild.InvokeMember("mousemove")
row(11).FirstChild.InvokeMember("mouseout")
row(11).FirstChild.InvokeMember("click")
row(11).FirstChild.RaiseEvent("onmouseover")
row(11).FirstChild.RaiseEvent("onMouseOver")
row(11).FirstChild.RaiseEvent("onmousemove")
row(11).FirstChild.RaiseEvent("onMouseMove")
row(11).FirstChild.RaiseEvent("onmouseout")
row(11).FirstChild.RaiseEvent("onMouseOut")
row(11).FirstChild.RaiseEvent("onclick")
row(11).FirstChild.RaiseEvent("onClick")
Sleep(200) '等待HTML更新
Dim messa As HtmlElement = Web.Document.GetElementById("floating_window")
Dim str As String = messa.InnerText

messa标签都没变化。实在是无解了。
...全文
846 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
FainSheeg 2018-01-01
  • 打赏
  • 举报
回复
引用 3 楼 StratosBlue的回复:
既然是Ajax加载的话还是强烈建议你抓包,模拟请求来直接获取数据,感觉这样比模拟操作好多了。。。。 sendmessage的话,相对麻烦些。。先获取到webbrowser的句柄,然后往这个句柄发对应的鼠标消息就行了,实例代码百度应该有一堆。。。 标签位置可以通过js来计算,http://blog.csdn.net/majormayer/article/details/50577305; 然后大概是webbrowser有一个InvokeScript方法执行js并返回结果。
先尝试了一下sendmessage失败。采用您的建议抓包模拟请求,确实很方便,解决了很多问题,比模拟操作好多了。多谢指点!
Anonymous477 2017-12-30
  • 打赏
  • 举报
回复
既然是Ajax加载的话还是强烈建议你抓包,模拟请求来直接获取数据,感觉这样比模拟操作好多了。。。。 sendmessage的话,相对麻烦些。。先获取到webbrowser的句柄,然后往这个句柄发对应的鼠标消息就行了,实例代码百度应该有一堆。。。 标签位置可以通过js来计算,http://blog.csdn.net/majormayer/article/details/50577305; 然后大概是webbrowser有一个InvokeScript方法执行js并返回结果。
FainSheeg 2017-12-30
  • 打赏
  • 举报
回复
引用 1 楼 StratosBlue 的回复:
鼠标移上去之后才加载的吗?如果不是异步加载,那么可以直接分析HTML源文件来获取你需要的数据啊; 如果鼠标移上去之后才加载的,那么你可以尝试抓包分析,使用代码直接发送请求获取数据; 或者使用win32api的mouse_event或者SendMessage来实现模拟鼠标操作;
是移上去加载的,因为是后台操作,所以mouse_event肯定是不行了,sendmessage没用过,能否给个示例,还有怎样获取标签位置?
Anonymous477 2017-12-30
  • 打赏
  • 举报
回复
鼠标移上去之后才加载的吗?如果不是异步加载,那么可以直接分析HTML源文件来获取你需要的数据啊; 如果鼠标移上去之后才加载的,那么你可以尝试抓包分析,使用代码直接发送请求获取数据; 或者使用win32api的mouse_event或者SendMessage来实现模拟鼠标操作;

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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