c# - C# Selenium Chrome 单击默认 chrome 主页中的链接
问题描述
我试图让 Selenium 点击默认 Chrome 网页中访问量最大的网络链接之一。
问题是 Selenium 无法在页面上找到该元素,我认为这与网页在技术上没有加载这一事实有关。当您打开 Chrome 时,那里有 HTML 元素,但地址栏完全是空的。我想这可能就是 Selenium 找不到链接的原因?代码很简单,找到 XPATH 不是问题。我只是不知道这是否是 Selenium 能够做到的功能。我正在尝试单击,因为当我输入代理信息时,navigation() 函数将不起作用,因为 Selenium 没有内置方法来处理带有用户名和密码的代理。
在一天结束时,我试图通过单击链接来弹出用户名/密码框。当我以编程方式使用 Selenium 打开浏览器然后手动单击链接时,会弹出用户名/密码框。但我无法让 Selenium 以编程方式找到要单击的元素。
var did = driver.FindElement(By.XPath("//*[@id='mv-tiles']/a[1]"));
did.Click();
更新 1:考虑到 iframe 时,我能够找到该元素,但单击仍然是一个问题。
var frm = driver.SwitchTo().Frame("mv-single");
var did = frm.FindElement(By.XPath("//*[@id='mv-tiles']/a[1]"));
//did.Click(); <-- I can see it go to the element but nothing occurs
IJavaScriptExecutor js2 = (IJavaScriptExecutor) driver;
js2.ExecuteScript("arguments[0].click();", did);
JavaScriptExecuter 能够单击该元素,但 Chrome 会阻止重定向并显示以下消息:
[21040:24704:1204/150143.743:ERROR:CONSOLE(1)]“不安全的 JavaScript 尝试从 URL 为 chrome 的框架中为 URL 为 chrome-search://local-ntp/local-ntp.html 的框架启动导航-search://most-visited/single.html?title=Most%20visited&removeTooltip=Don%27t%20show%20on%20this%20page&enableCustomLinks=1&addLink=Add%20shortcut&addLinkTooltip=Add%20shortcut&editLinkTooltip=Edit%20shortcut'. 试图导航的框架正在瞄准其顶级窗口,但既不与目标同源,也未收到用户手势。请参阅https://www.chromestatus.com/features/5851021045661696。“,来源:(1)
最后更新:我放弃并决定为带密码的代理做浏览器扩展解决方案:https ://stackoverflow.com/a/35293222/5415162
解决方案
“最近的页面”列表实际上在一个 中iframe
,这可能是 Selenium 找不到它的原因。尝试更新选择器以考虑iframe
,或者添加等待子句以允许iframe
完成加载。
无论采用哪种解决方案,我认为它的行为与仅导航到目标 URL 没有什么不同。因此,为了解决您的根本问题,您是否尝试在创建时设置代理详细信息ChromeOptions
?
推荐阅读
- java - 如何在不使用 Java 库中的 CyclicBarrier 的情况下制作自己的 CyclicBarrier
- c# - SqlDataReader 只能检查(Null 或非 null 值)之一
- firebase - 获取下拉菜单选择的值并将其发送到 Firebase ( Flutter )
- php - 基于国家代码的 WooCommerce 动态产品类别信息
- python - 获取变量名数据类型和值的函数
- r - 使用具有重复测量数据的 R 的 pivot_wider 或类似函数
- python - pybind 库在导入时更改链接到当前 python 进程的 .so 文件
- html - 如何在css中访问类型复选框
- python - 是否有一个选项可以在 python 代码的循环中组合列表中的不同行
- javascript - 由于上下文丢失,我的文档未定义