joy-field

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

 

分类:

技术点:

相关文章: