【问题标题】:Selenium Chromedriver - Click Cancel Chrome Authentication Pop UpSelenium Chromedriver - 点击取消 Chrome 身份验证弹出
【发布时间】:2019-04-05 14:22:37
【问题描述】:

我正在为 python 应用程序使用 VPN Chrome 应用程序。每当我启动 Chrome 实例并且 Chrome 在 VPN 插件准备好之前开始加载网站时,就会出现以下弹出窗口。一旦我点击取消按钮,VPN插件通常就准备好了,我可以毫无问题地访问互联网。

我正在寻找一种使用 Selenium 来单击“取消”按钮的方法。

到目前为止我所尝试的:

  • 将主页设置为 Chrome 设置 -> 没有出现弹出窗口,因为设置不是网站,经过很短的时间。睡眠后,我大部分时间都可以毫无问题地继续。每隔一段时间,弹出窗口仍然会出现。

  • 使用webdriver.ActionChains(driver).send_keys(Keys.ESCAPE).perform() 每当我尝试此操作时,脚本都会冻结,直到我手动单击“取消”按钮,然后执行该操作。 driver.get(url)driver.switch_to.alert()也是如此

谢谢!

编辑 1(将 Chrome 选项设置为不显示通知和信息栏并不能解决问题):

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import selenium.common.exceptions

options = Options()
options.headless = False

options.add_argument("user-data-dir=ChromeProfiles\Profile_{}".format(22))
options.add_argument("--profile-directory=profile_1")
options.add_argument("--disable-notifications")
options.add_argument("--disable-infobars")

driver = webdriver.Chrome(options=options, executable_path="chromedriver.exe")

如您所见,只要弹出窗口打开,命令就不会执行:

【问题讨论】:

  • 是否尝试过 chrome 选项来禁用弹出通知?
  • 我尝试使用prefs = {"profile.default_content_setting_values.notifications" : 2} options.add_experimental_option("prefs",prefs) 没有结果。
  • 几个月前我在使用 ChromeDriver 时遇到了类似的问题。但是当我使用 driver.switch_to.alert() 将其更改为在 FireFox 浏览器上运行时,它运行良好。你能用driver.switchTo().alert().dismiss()测试Firefox中是否发生同样的情况吗?
  • 我刚刚检查了 Firefox + Geckodriver。不幸的是,在加载我的项目所依赖的自定义配置文件时,Firefox 似乎存在一些问题。
  • 你有没有找到解决这个问题的方法?

标签: python python-3.x selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

1) void dismiss() // 点击警报的“取消”按钮。

driver.switchTo().alert().dismiss();

2) void accept() // 点击警报的“确定”按钮。

driver.switchTo().alert().accept();

3) String getText() // 捕获警报信息。

driver.switchTo().alert().getText();    

4) void sendKeys(String stringToSend) // 发送一些数据到警报框。

driver.switchTo().alert().sendKeys("Text");

您可以从Guru 99引用所有这些

另外你应该看看它是哪种警报,浏览器推送通知,浏览器警报等......

这些是我禁用通知、警报和推送通知的 chrome 选项

chrome.switches = --incognito;--disable-download-notification;--disable-infobars

也是实现 chrome 选项的另一种方式

ChromeOptions ops = new ChromeOptions();
        ops.addArguments("--disable-notifications");
        ops.addArguments("--disable-infobars");
        System.setProperty("webdriver.chrome.driver", "./lib/chromedriver");
        driver = new ChromeDriver(ops);

最后,这里是 chrome 驱动程序文档,可进一步帮助您。 ChromeDriver Docs

编辑:

driver.switchTo().activeElement();
driver.close()

或者你可以试试

Driver.SwitchTo().frame("NameOfFrame");

Driver.findElement("enter path to cancel button").click();

Driver.SwitchTo().defaultContent();

希望对你有帮助

【讨论】:

  • driver.switchTo().alert().dismiss() 在我手动单击取消之前什么都不做,就像我在帖子中所说的那样。我还尝试像您在帖子末尾指出的那样设置 Chrome 选项。不幸的是,弹出窗口并没有以这种方式受到抑制。它仍然出现。
  • 这是浏览器级别的事件还是dom级别的事件?
  • 检查我的编辑,它们可能更符合您的要求,但这是一种解决方法。您应该能够通过 chrome 选项禁用通知。所以我怀疑您的 ChromeDriver 选项配置不正确。
  • 如果我调用它们,driver.switch_to.active_element 和 driver.switch_to.frame("Framename") 都不会执行。在手动点击取消之前,Selenium 似乎有点冻结。如果您想查看它们,我还在上面添加了我的 Chrome 选项设置。如果这是 dom 级别的事件,我将如何注意到?它肯定在浏览器内部,而不是第二个窗口。
  • 按 ESC 关闭弹出窗口,但通过 Selenium 发送密钥不起作用,因为我将同时运行多个实例,所以我不能使用 dom 级别的命令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
  • 2017-11-26
  • 1970-01-01
  • 2021-02-04
  • 2017-09-14
  • 2013-10-21
相关资源
最近更新 更多