1.定位一组对象
content = driver.find_elements_by_css_selector('div.con_content p')
for con in content:
print(con.text)
2.层级定位
driver.find_element_by_id('***').find_element_by_id('***')
3.定位frame中的对象
driver.switch_to_frame('login_frame') #切换至iframe框架
driver.switch_to_default_content()#切换至原来的页面
4.alert/confirm/prompt处理
*selenium提供一个alert(),用来统一处理三种弹窗
driver.switch_to_alert() #切换至alert
driver.switch_to_default_content() #切换至原来原面
driver.switch_to_alert().accept() #弹窗页面确认按钮点击
driver.switch_to_alert().dismiss()#弹窗页面取消按钮点击
driver.switch_to_alert().text #弹窗页面文本内容获取
driver.switch_to_alert().sendKeys():写入内容到prompt弹窗内的文本框中
5.下拉框处理
## 方法一:下拉框通过元素定位识别 driver.find_element(By.CSS_SELECTOR,'option[value="eryue"]').click() time.sleep(3) # 方法二:创建一个select的对象 s = driver.find_element_by_id('month') # 识别下拉菜单元素 se = Select(s) # 定义下拉菜单操作对象 # 1、按索引位置 se.select_by_index(0) # 2、按照value值 se.select_by_value('sanyue') # 3、按照文本内容 se.select_by_visible_text('二月') # 方法三:通过层级定位 driver.find_element_by_id('month').find_element_by_css_selector('option[value="eryue"]').click()
6.调用JavaScript
from selenium import webdriver import time driver = webdriver.Chrome() driver.get('http://www.12306.cn') # 第一种 直接执行js语句 # driver.execute_script('alert("hello world!!")') # 第二种 另一种是在某个已经定位的元素上执行js wl = driver.find_element_by_id('fromStationText') # 先要定位到元素 定义成变量 driver.execute_script("arguments[0].style.border='5px solid red'", wl) # 修改元素的属性值 Js = 'arguments[0].removeAttribute("readonly");' #移除元素的value属性 e = driver.find_element_by_id('train_date') driver.execute_script(Js,e) js_modify= "document.getElementById('train_date').value='P2'" driver.execute_script(js_modify,e) # 操作浏览器的滚动条 # driver.execute_script(“document.body.scrollTop=10000;”)# 这句话有些浏览器无法实现滚动 time.sleep(5) # 在这之前最好将窗口最大化 driver.execute_script("document.documentElement.scrollTop=10000;") # scrollTop = 值 足够大 就会滚动到浏览器的最低部
# 滚动到指定元素位置
driver.execute_script('''document.querySelector("[href='/ucenter/password']").scrollIntoView()''')
7.浏览器多窗口处理
方法一:获取所有窗口返回列表,以索引获取
handles = driver.window_handles # 获取当前打开的所有窗口的句柄
driver.switch_to.window(handles[0]) #切换到百度首页(切换到第一个打开的页面)
方法二:处理两个窗口的切换
from selenium import webdriver import time driver = webdriver.Chrome() driver.get('http://mail.126.com') # 两个窗口的操作思路 # 获取当前页面的窗口句柄 handle = driver.current_window_handle # 返回值是一个字符串 print(handle) # 再打开新的标签页 driver.find_element_by_link_text('企业邮箱').click() # 再获取所有窗口的句柄 handles = driver.window_handles # 返回值是一个列表 print('窗口的句柄',handles) # 开始判断是否是新要打开的窗口,如果是就跳转driver for h in handles: # if h !=handle: driver.switch_to.window(h) # 在新的标签页面进行元素操作 driver.find_element_by_link_text('产品').click() time.sleep(5) driver.quit()
方法三:处理多个窗口打开时切换
from selenium import webdriver import time driver = webdriver.Chrome() driver.get('http://mail.126.com') # 获取首页句柄 home_handle = driver.current_window_handle # 打开多个窗口 driver.find_element_by_link_text('企业邮箱').click() time.sleep(1) driver.find_element_by_link_text('VIP邮箱').click() # 获取所有窗口的句柄 handles = driver.window_handles # 进行判断,跳转driver for h in handles: driver.switch_to.window(h) if '企业邮箱' in driver.title: break if 'vip' in driver.current_url: break driver.find_element_by_link_text('产品').click() time.sleep(5) driver.quit()
8.验证码处理
验证码的处理方式:
1、去掉验证码---只适用于测试环境
2、设置万能码---只适用于测试环境
3、验证码识别技术--识别率比较低--python中提供了方法去识别图片中的文字,因为验证码一般会做模糊处理
4、手动输入(设置等待,手动输入)
5、使用cookie绕过验证码,只能绕过登陆---cookie有时效性 (见9.cookie处理)
9.cookie处理
使用cookie绕过登录页面直接登录
步骤:
1.获取登录后的cookie信息
2.删除所有cookie信息(driver.delete_all_cookies())
3.将cookie信息使用driver.add_cookie()方法逐一添加
4.刷新页面
添加cookie代码:
from time import sleep from case.drivers_set import driver driver.get('http://shop.aircheng.com/') driver.maximize_window() driver.delete_all_cookies()#把所有cookie全部删掉 cookies_info = {#name,value 'iweb_last_login':'c0300d28fd4a418845VQdTUgQFVgkDVQIBAwkOVgYHBlZSCARVXQJVBlVQAgdQBQJUT1VXHQcJRgYADlYHCAAF', 'iweb_user_pwd':'241ed37b7448aea5e9VgkEAVQCAwNUAQhWU1NRB1AAAQcIBlhXUV1YU1cMVFZQUglXV1MECw0IV1lTXVRbUgZUVwZRAlQAUFMCXV0GUg', 'iweb_username':'da538fb4d7c35be078UVNRAgMFUVEHBltRUgBXVgJSV1AGBwFXA1YDAVoAD1YJWgdcX0hJ', 'iweb_user_id':'d3560da07629066935CVIGAQRSB1UFAAEKXg0GCw0GVV1UDA0EBQEBXQsHUVVXDg', 'PHPSESSID':'f1cci9rklj7j1v3jdghsc89sq3', 'iweb_callback':'1a2cb3437751a57244VlYBAgdTBFQIAVoCVwADWQcFUlUKDVQMBAYKUlIDBAc', 'iweb_head_ico':'dd7ed0b46fa7cb8effBFJWCQYHVgRSBwIGVgNWUldUUQRTAQNfBVEAUVZSBQU', '__cfduid':'d2407355743689c42c39d3b14889a8d7c1589769872' } #一个一个将cookie信息传入进去 for c,s in cookies_info.items(): # items() 方法以列表返回可遍历的(键, 值) 元组数组 cookies_lists = { 'domain':'shop.aircheng.com', 'httpOnly': False, 'secure': False, 'name': c, 'path': '/', 'value':s } driver.add_cookie(cookies_lists) driver.refresh() sleep(2) driver.quit()