Python和Selenium - 离开页面

时间:2017-07-24 19:06:09

标签: python selenium automation

使用 Python 3 Chromedriver

假设一个自动化的python程序正在网上冲浪,从不同的来源获取东西。

假设这些网站中的任何一个都会触发"您确定要离开此页吗?" 警告。

关键词:任何(以随机方式)这些网站。

问题

我如何设置程序来处理这些警报,总是说:"是的,我想离开这个页面"。?

---更新---

可能的方法

根据以下评论,我现在正在做:

def super_get(url):
    driver.get(url)
    driver.execute_script("window.onbeforeunload = function() {};")

现在使用标准super_get()

driver.get()插入内容

你能想到更有效或更清洁的方式吗?

2 个答案:

答案 0 :(得分:2)

在卸载前禁用警报

def super_get(url):
    driver.get(url)
    driver.execute_script("window.onbeforeunload = function() {};")

现在使用标准super_get(whatever_url)

driver.get(whatever_url)插入内容

停用页面中的所有提醒

def super_get(url):
    driver.get(url)
    driver.execute_script("window.alert = function() {};")

希望它有所帮助。欢呼声。

答案 1 :(得分:0)

目标 通过getEventListeners(window)['beforeunload']获取所有侦听器,并将其全部删除。

步骤1。将DOMDebugger.getEventListeners放入window ['getEventListeners']

VB.NET

Dim myChromeDriver as ChromeDriver = getMyDriver()
myChromeDriver.ExecuteChromeCommand("Runtime.evaluate", New Dictionary(Of String, Object)() From {
{"expression", "window['getEventListeners'] = getEventListeners;"},
{"includeCommandLineAPI", True}})

我们不需要此Command的结果值。

includeCommandLineAPI = True是必需的,否则将引发异常,因为getEventListeners是在脚本执行上下文中未定义的CommandLineAPI

步骤2。删除所有听众

Dim jsCmd As String = "var eventlistener = window['getEventListeners'](window)['beforeunload'][0];" &
"    window.removeEventListener('beforeunload', " &
"    eventlistener.listener, " &
"    eventlistener.useCapture); "
myChromeDriver.ExecuteScript(jsCmd)

运行此脚本,直到getEventListeners(window)['beforeunload']为空为止。

删除所有侦听器后,此脚本将引发异常,您可以对其进行修复。

最后

oDriver.Navigate.GoToUrl("https://www.google.com")

“您确定..”警报应该消失。