通过 webdriver 点击 javascript 弹出窗口

Posted

技术标签:

【中文标题】通过 webdriver 点击 javascript 弹出窗口【英文标题】:Click the javascript popup through webdriver 【发布时间】:2012-01-27 17:24:18 【问题描述】:

我在 Python 中使用 Selenium webdriver 抓取网页

我正在处理的网页有一个表格。我可以填写表格,然后点击提交按钮。

它会生成一个弹出窗口(javascript Alert)。我不确定,如何通过 webdriver 点击弹出窗口。

知道怎么做吗?

谢谢

【问题讨论】:

看到code.google.com/p/selenium/wiki/…?不是Python,但我觉得还是蛮好理解的。 是的。但它不适用于 Python。我还没有找到一个等效的函数来处理弹出窗口。 How to click and verify the existence of a pop up (alert)的可能重复 好吧,它不是。我的问题与webdriver有关,您所指的问题与硒有关。 【参考方案1】:

Python Webdriver 脚本:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://sandbox.dev/alert.html")
alert = browser.switch_to_alert()
alert.accept()
browser.close()

网页(alert.html):

<html><body>
    <script>alert("hey");</script>
</body></html>

运行 webdriver 脚本将打开显示警报的 HTML 页面。 Webdriver 立即切换到警报并接受它。 Webdriver 然后关闭浏览器并结束。

如果您不确定是否会发出警报,那么您需要使用类似的方法来捕获错误。

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://sandbox.dev/no-alert.html")

try:
    alert = browser.switch_to_alert()
    alert.accept()
except:
    print "no alert to accept"
browser.close()

如果需要查看alert的文本,可以通过访问alert对象的text属性来获取alert的文本:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://sandbox.dev/alert.html")

try:
    alert = browser.switch_to_alert()
    print alert.text
    alert.accept()
except:
    print "no alert to accept"
browser.close()

【讨论】:

switch_to_alert() 现在在最新的 Selenium Python 绑定 v 2.46.0 中已弃用。请改用 driver.switch_to.alert。来源:selenium-python.readthedocs.org/en/latest/api.html【参考方案2】:
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
#do something
if EC.alert_is_present:
    print "Alert Exists"
    driver.switch_to_alert().accept()
    print "Alert accepted"
else:
    print "No alert exists"

更多关于excepted_conditions https://seleniumhq.github.io/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.expected_conditions.html

【讨论】:

@bad_deadpool 感谢您的更新!另外:该链接是 404 - 该文档现在位于 selenium-python.readthedocs.io/…【参考方案3】:

我正在使用 Ruby 绑定,但这里是我在 Selenium Python Bindings 2 文档中找到的内容: http://readthedocs.org/docs/selenium-python/en/latest/index.html

Selenium WebDriver 内置支持处理弹出对话框。在触发和操作会打开一个弹出窗口后,您可以通过以下方式访问警报:

alert = driver.switch_to_alert()

现在我猜你可以这样做:

if alert.text == 'A value you are looking for'
  alert.dismiss
else
  alert.accept
end

希望对你有帮助!

【讨论】:

【参考方案4】:

试试下面的代码!对我来说工作得很好!

alert = driver.switch_to.alert
try:
   alert.accept() #If you want to Accept the Alert
except:
   alert.dismiss()  #If  You want to Dismiss the Alert.

【讨论】:

很好的答案!这很有帮助!谢谢朋友:)【参考方案5】:

这取决于处理表单提交的 javascript 函数 如果没有这样的功能,请尝试使用 post 提交表单

【讨论】:

我收到一个简单的 javascript 警报,上面写着“感谢提交”,我想按回车键关闭弹出窗口。【参考方案6】:

如果你想接受或点击弹出窗口,不管它是什么

alert.accept

在哪里 alertselenium.webdriver.common.alert.Alert(driver) 类的对象 accept 是该对象的方法

Source

【讨论】:

以上是关于通过 webdriver 点击 javascript 弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章

5月21日 JavaScrip应用t练习

selenium webDriver给隐藏域赋值 input hidden set value

如何使用 poltergeist webdriver 让 JS 点击?

Selenium库

JavaScrip事件

第二记:webdriver API