通过 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
在哪里
alert
是 selenium.webdriver.common.alert.Alert(driver)
类的对象
accept
是该对象的方法
Source
【讨论】:
以上是关于通过 webdriver 点击 javascript 弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章
selenium webDriver给隐藏域赋值 input hidden set value