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()