Cefsharp执行模拟点击以下网页
<a id="gvList_ctl02_HyperLink1" title="已学习 1.0%" class="courseware-list-reed" href="javascript:w("https://wcs1.shawcoder.xyz/ctrjd/play_pc/playverif_pc.html?t=aa6506fc78a048b9ade3e9c805863a0a&courseLabel=wlxy&courseId=7fa4d191fdbc47ea95db7b02f0336ca4");">继续学习a>
为什么下面这段vb.net代码执行模拟点击该元素会不成功呢?
browser.EvaluateScriptAsPromiseAsync("document.getElementById('gvList_ctl02_HyperLink1').click();")
另外我试了 browser.GetBrowserHost().SendMouseClickEvent,代码如下,也同样不成功
Dim js As String =
"(function () {
var bnt = document.getElementById('gvList_ctl02_HyperLink1');
bnt.focus();
var bntRect = bnt.getBoundingClientRect();
return JSON.stringify({ x: bntRect.left, y: bntRect.top });
})();"
Dim js_task As Task(Of JavascriptResponse) = browser.EvaluateScriptAsync(js, timeout:=Nothing)
js_task.Wait() '阻塞等待task任务结束
‘///此处略过部分代码,获取到坐标px、py
browser.GetBrowserHost().SendMouseClickEvent(px, py, MouseButtonType.Left, True, 1, CefEventFlags.None)
browser.GetBrowserHost().SendMouseClickEvent(px, py, MouseButtonType.Left, False, 1, CefEventFlags.None)
求解答一下困惑,怎么模拟点击该元素,用C#或vb.net都可以
从代码来看,通过坐标和通过id触发点击事件都失败了,是否有iframe嵌套的情况呢?
另一种思路:链接中调用了w()方法,可以考虑看看w()方法中的内容,直接通过js调用,绕开点击事件。
这个类似问题我碰到过我是c#的 ,但逻辑应该差不多你可以试试:js模拟点击时设置个timeout延迟执行 因为js执行的的时候 页面可能还没完全渲染加载完毕,执行无效了
await browser.MainFrame.EvaluateScriptAsync(" setTimeout(function(){ $('.btn-upload').click();},10000);");//10秒后运行页面上js的方法
【目前暂未联想到最完美的答案,只能提供些许思路灵感】
常见的模拟点击的几种方式:
document.getElementsByClassName('btn_addtocart')[0].click();
document.querySelector('.btn_addtocart').click();
document.getElementsByClassName('btn_addtocart')[0].InvokeMember("click");
另外,我觉得这边博文应该可以给你一些灵感:https://blog.csdn.net/qq_25744257/article/details/83861666
【博文主要讲C# 嵌套浏览器与网页交互】