(selenium+python) alert/confirm/prompt 处理

使用Selenium和Python处理JavaScript生成的alert、confirm和prompt对话框时,可以通过switch_to_alert方法进行操作。在实际应用中,可能遇到如定位错误、复合类名不支持等问题,通过调整定位策略和添加等待时间可以解决这些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WebDriver中处理JS所生成的alert、confirm、promot是很简单的。具体思路是使用switch_to_alert()方法定位到alert/confirm/promot。然后使用text/accept/dismiss/send_keys按需要进行操作。

下面是模拟百度首页的搜索设置。



第一次运行代码hello.py

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://www.baidu.com/")

#打开搜索设置
driver.find_element_by_css_selector("#u1 > a.pf").click()
driver.find_element_by_link_text(u"搜索设置").click()
time.sleep(3)

#点击保存设置
driver.find_element_by_css_selector("#gxszButton > a.prefpanelgo").click()
#获取页面上的警告信息
alert = driver.switch_to_alert()

#接收警告信息
alert.accept()
driver.quit()
遇到的问题:

1.在步骤“点击保存设置”的时候遇到错误,无法找到"#gxszButton > a.prefpanelgo"对应的元素。

原因及解决方法:百度的设置弹出的对话框是div形式的。需要进行二次定位。

div = driver.find_element_by_class_name("bdlayer").find_element_by_css_selector("#gxszButton > a.prefpanelgo")
div.click()”


第二次运行代码hello.py

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://www.baidu.com/")

#打开搜索设置
driver.find_element_by_css_selector("#u1 > a.pf").click()
driver.find_element_by_link_text(u"搜索设置").click()
time.sleep(3)

#点击保存设置
div = driver.find_element_by_class_name("bdlayer pfpanel").find_element_by_css_selector("#gxszButton > a.prefpanelgo")
div.click()

#获取页面上的警告信息
alert = driver.switch_to_alert()

#接收警告信息
alert.accept()
driver.quit()
遇到的问题:

1.还是在步骤“点击保存设置”的时候遇到错误“selenium.common.exceptions.WebDriverException: Message: unknown error: Compound class names not permitted”


原因及解决方法:http://www.mamicode.com/info-detail-1821583.html

第三次运行代码hello.py

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://www.baidu.com/")

#打开搜索设置
driver.find_element_by_css_selector("#u1 > a.pf").click()
driver.find_element_by_link_text(u"搜索设置").click()
time.sleep(3)

#点击保存设置
div = driver.find_element_by_class_name("bdlayer").find_element_by_css_selector("#gxszButton > a.prefpanelgo")
div.click()

#获取页面上的警告信息
alert = driver.switch_to_alert()

#接收警告信息
alert.accept()
driver.quit()
遇到的问题:

1.在步骤“获取页面上的警告信息”遇到问题“selenium.common.exceptions.NoAlertPresentException: Message: no alert open”


原因及解决方法:页面还没有加载出来,就对页面上的元素进行操作了。加代码 time.sleep(8)就OK了。

最终运行成功的代码:

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://www.baidu.com/")

#打开搜索设置
driver.find_element_by_css_selector("#u1 > a.pf").click()
driver.find_element_by_link_text(u"搜索设置").click()
time.sleep(3)

#点击保存设置
div = driver.find_element_by_class_name("bdlayer").find_element_by_css_selector("#gxszButton > a.prefpanelgo")
div.click()
time.sleep(8)

#获取页面上的警告信息
alert = driver.switch_to_alert()

#接收警告信息
alert.accept()
driver.quit()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值