C# webbrowser控件如何触发元素oncontextmenu事件

xuange131 2019-04-01 09:28:13
新人求助,分少见谅。。请大神不吝赐教。
现在使用WPF 中的webbrowser控件模拟操作网页,进行数据采集。
查询得到10个并列的数据,如图,右键点击数据后弹出菜单,点击查看名单后得到想要的数据;
现在的问题是,查看名单这个元素只有一个,并不是每条数据都有,如果跳过右键这一步,直接找查看名单元素也能找到,但是点击无效,求助各位大神如何能模拟右键点击元素,或者通过改变元素的某些属性达到类似效果?
--------------分割线-------------
经本人努力学习后,发现每条数据都对应了一个oncontextmenu事件,这个事件是随数据生成的唯一的,那么现在问题就变成了如何触发这个事件,请路过的大佬们指点一下~
--------------分割线-------------
爬虫因为这个网站有点复杂,本人水平有限爬不动,暂不做考虑~谢谢大佬们。
...全文
103 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2019-04-07
  • 打赏
  • 举报
回复
引用我的回复就会有通知 问题是问答那里答案加个赞同就会有通知,还有很多邀请回答的,收件箱常年99+……。
蒋晟 2019-04-07
  • 打赏
  • 举报
回复
貌似事件类型也得dynamic createevent是IE9才加的,你的浏览器控件没调版本号的话会报成员找不到。浏览器控件默认是IE7兼容模式,IE9之前用 document.createEventObject (无参数)和el.fireEvent("oncontextmenu") createevent的参数可以在 https://msdn.microsoft.com/en-us/ie/ff975304%28v=vs.94%29?f=255&MSPPError=-2147217396 找到。
xuange131 2019-04-07
  • 打赏
  • 举报
回复
引用 3 楼 蒋晟 的回复:
貌似事件类型也得dynamic createevent是IE9才加的,你的浏览器控件没调版本号的话会报成员找不到。浏览器控件默认是IE7兼容模式,IE9之前用 document.createEventObject (无参数)和el.fireEvent("oncontextmenu") createevent的参数可以在 https://msdn.microsoft.com/en-us/ie/ff975304%28v=vs.94%29?f=255&MSPPError=-2147217396 找到。
感谢大佬回复,很抱歉以为你忘了,我就结贴了。应该给你加分的,我会尝试找管理的。 这个问题其实也没解决,只是找了个取巧的方法绕过去的。后续我找机会试试大佬你的方法。 话说怎么@人呀这个论坛。。大佬你肯定是不知道我想@你的。。
xuange131 2019-04-02
  • 打赏
  • 举报
回复
引用 1 楼 蒋晟 的回复:
dynamic doc = Browser.Document; var ev = doc.createEvent("event"); ev.initEvent("oncontextmenu", true, true); 然后看网站上那个oncontextmenu事件处理是挂在哪个对象上的。 比如js里面是这么挂的 document.oncontextmenu = function() {....} 那就doc.dispatchEvent(ev); 比如html里面是这么挂的 <div id=abc oncontextmenu = "...." 那就 dynamic el = doc.getElementById('abc'); el.dispatchEvent(evt);
感谢大佬回复,我迅速操作了一下。 数据本身的对象没有id,所以我找到他的parentElement后用children定位到了这个对象,但是编译后出现了这个问题。 另外还想请教一下,var ev = doc.createEvent("event");这句话的函数我没接触过,里面这个“event”是什么?固定用法吗?
蒋晟 2019-04-02
  • 打赏
  • 举报
回复
dynamic doc = Browser.Document; var ev = doc.createEvent("event"); ev.initEvent("oncontextmenu", true, true); 然后看网站上那个oncontextmenu事件处理是挂在哪个对象上的。 比如js里面是这么挂的 document.oncontextmenu = function() {....} 那就doc.dispatchEvent(ev); 比如html里面是这么挂的 <div id=abc oncontextmenu = "...." 那就 dynamic el = doc.getElementById('abc'); el.dispatchEvent(evt);

110,538

社区成员

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

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

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