随笔记录方便自己和同路人查阅。
#------------------------------------------------我是可耻的分割线-------------------------------------------
学习selenium自动化之前,最好先学习HTML、CSS、JavaScript等知识,有助于理解定位及操作元素的原理。关于python和selenium安装请自行搜索别的资料,
这里就不多做介绍了,所有例子均使用python3.6+selenium执行的。
#------------------------------------------------我是可耻的分割线-------------------------------------------
警告框处理
在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体做法使用switch_to_aler()方法定位到alertconfirmprompt,然后使用text/accept/dismiss/send_keys等方法进行操作。
text:返回alertconfirmprompt中的文字信息。
accept:接收现有警告框。
dismiss:解散现有警告框。
send_keys(KeysToSend):发送文本至警告框。KeysToSend:将文本发送至将警告框。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="button" id="alert2" onclick="func()" value="按钮"></input> <script> function func(){ alert(123); } </script> </body> </html>
以上html代码是我们自己写的一个简单的alert弹框,先以它为例,这个时候就可以通过switch_to_alert()方法接收这个弹框。
from selenium import webdriver import time driver = webdriver.Chrome() driver.get('C:\Users\86136\PycharmProjects\spider\alert.html') #定位到按钮 driver.find_element_by_class_name('alert2').click() time.sleep(1) #接收警告框 driver.switch_to_alert().accept()
通过switch_to_alert()接收当前页面的警告框。并使用accept()方法接受警告框
以百度搜索设置弹出的弹框窗口为例,它不能通过前端工具对其进行定位,这个时候就可以通过switch_to_alert()方法接收这个弹框。
from selenium.webdriver.support.select import Select from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time as t driver = webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(30) driver.get('http://www.baidu.com') #实现鼠标悬浮到百度首页的设置 element = driver.find_element_by_css_selector('a.pf:nth-child(8)') t.sleep(3) ActionChains(driver).move_to_element(element).perform() t.sleep(3) #点击设置中的搜索设置按钮 driver.find_element_by_css_selector('.setpref').click() t.sleep(2) #定位到下拉框的元素属性 nr = driver.find_element_by_name('NR') #实例化Select类 select = Select(nr) #按value值得方式来选择下拉框中的内容 select.select_by_visible_text('每页显示50条') print('下拉框选择的最新条数是:',nr.get_attribute('value')) #点击保存设置按钮 driver.find_element_by_css_selector('#gxszButton > a.prefpanelgo').click() #获取弹出的文本信息 print('alert 弹出框的文本信息为:{0}'.format(driver.switch_to_alert().text)) t.sleep(3) #点击alert弹出框中的确定按钮 driver.switch_to_alert().accept() driver.quit()
ActionChains类提供的move_to_element()鼠标悬停的使用,将鼠标悬停在“设置”链接上,然后在弹出的下拉菜单中选择的最新条数是50,并点击“保存设置”按钮,弹出保存确认警告框。通过switch_to_alert()方法获取当前页面的警告框,text方法获取警告框文本内容,accept()方法接受警告框。