简介
Selenium是广泛使用的模拟浏览器运行的库,它是一个用于Web应用程序测试的工具。 Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,并且支持大多数现代 Web 浏览器。
环境
安装
pip install selenium
下载Chrome驱动
系统环境配置添加驱动所在路径
基础用法
1、页面操作
初始化浏览器对象
from selenium import webdriver
browser = webdriver. Chrome( )
访问页面
from selenium import webdriver
import time
browser = webdriver. Chrome( )
browser. get( "https://www.baidu.com" )
前进后退
from selenium import webdriver
import time
browser = webdriver. Chrome( ) browser. get( "https://www.baidu.com" )
time. sleep( 2 ) 打开淘宝页面
browser. get( 'https://www.bilibili.com/' )
time. sleep( 2 )
browser. back( )
time. sleep( 2 )
browser. forward( )
time. sleep( 2 )
browser. close( )
获取页面基础属性
print ( browser. title)
print ( browser. current_url)
print ( browser. name)
print ( browser. page_source)
2、定位页面元素
属性 函数 CLASS find_element(by=By.CLASS_NAME, value=‘’) XPATH find_element(by=By.XPATH, value=‘’) LINK_TEXT (定位文本 精准) find_element(by=By.LINK_TEXT, value=‘’) PARTIAL_LINK_TEXT (定位文本 模糊) find_element(by=By.PARTIAL_LINK_TEXT, value=‘’) TAG (整个页面所有指定标签 比如value=‘div’) find_element(by=By.TAG_NAME, value=‘’) CSS find_element(by=By.CSS_SELECTOR, value=‘’) ID find_element(by=By.ID, value=‘’)
from selenium import webdriver
import time
from selenium. webdriver. common. by import By
browser = webdriver. Chrome( ) browser. get( "https://www.51kim.com/" )
element = browser. find_element( by= By. CLASS_NAME, value= "copyright" ) . text
print ( element)
time. sleep( 2 )
browser. close( )
// css
a1 = driver. find_element( By. CSS_SELECTOR, '#livenews-id-1-202301272620081211 > div.media-content > h2 > a' ) . text// xpath
driver. find_elements( By. XPATH, '//*[@id="livenews-id-1-202301282620082087"]' )
3、模拟鼠标操作、模拟键盘操作
右击 context_click() 双击 double_click() 拖拽 double_and_drop()
悬停 move_to_element() 执行 perform()
from selenium import webdriver
import time
from selenium. webdriver. common. by import By
from selenium. webdriver. common. action_chains import ActionChains
browser = webdriver. Chrome( ) browser. get( "https://www.xx.com/" ) time. sleep( 2 )
actions = ActionChains( browser)
element = browser. find_element( by= By. CLASS_NAME, value= "dl_temp" )
actions. move_to_element( element) . perform( )
actions. context_click( element) . perform( ) time. sleep( 2 )
double_click_element = browser. find_element( by= By. CLASS_NAME, value= "dl_temp" )
actions. double_click( double_click_element) . perform( )
time. sleep( 2 )
time. sleep( 2 )
browser. quit( )
move_to_element( ) 方法用于将鼠标移动到指定的 Web 元素上。
context_click( ) 方法用于模拟鼠标右键点击。
double_click( ) 方法用于模拟鼠标左键双击。
drag_and_drop( ) 方法用于模拟从一个元素到另一个元素的拖拽动作。
模拟键盘操作
actions = ActionChains( driver)
input_element = driver. find_element( By. ID, "input-id" )
input_element. send_keys( "Hello World" )
input_element. send_keys( Keys. RETURN)
actions. key_down( Keys. CONTROL) . send_keys( 'a' ) . key_up( Keys. CONTROL) . perform( )
actions. key_down( Keys. CONTROL) . send_keys( 'c' ) . key_up( Keys. CONTROL) . perform( )
another_input_element = driver. find_element( By. ID, "another-input-id" )
another_input_element. click( )
actions. key_down( Keys. CONTROL) . send_keys( 'v' ) . key_up( Keys. CONTROL) . perform( )
pip install pyautogui
from selenium. webdriver. common. keys import Keys
操作 函数 删除键 send_keys(Keys.BACK_SPACE) 空格键 send_keys(Keys.SPACE) 制表键 send_keys(Keys.TAB)
回退键 send_keys(Keys.ESCAPE) 回车 send_keys(Keys.ENTER) 全选 send_keys(Keys.CONTRL,‘a’) 复制 send_keys(Keys.CONTRL,‘c’) 剪切 send_keys(Keys.CONTRL,‘x’)
粘贴 send_keys(Keys.CONTRL,‘x’) 键盘F1 send_keys(Keys.F1)
import pyautogui
import time
time. sleep( 3 )
pyautogui. write( 'Hello World' , interval= 0.1 )
pyautogui. press( 'enter' )
pyautogui. hotkey( 'ctrl' , 'a' )
pyautogui. hotkey( 'ctrl' , 'c' )
pyautogui. hotkey( 'ctrl' , 'v' )
4、延时等待
强制等待:就很简单了,直接time.sleep(n)强制等待n秒
隐式等待:implicitly_wait()设置等待时间,如果到时间有元素节点没有加载出来,就会抛出异常
显式等待:
5、对Cookie操作
driver = webdriver. Chrome( )
driver. get( 'https://xxxxx.com' )
cookie = { 'name' : 'example_cookie' , 'value' : 'example_value' }
driver. add_cookie( cookie)
driver. refresh( )
all_cookies = driver. get_cookies( )
specific_cookie = next ( ( c for c in all_cookies if c[ 'name' ] == 'example_cookie' ) , None )
driver. delete_cookie( 'example_cookie' )
driver. delete_all_cookies( )
6、execute_script方法
def is_element_exist ( browser, xpath) : try : element= browser. find_element( by= By. XPATH, value= xpath) flag= True except : flag= False return flag
x = 1000
y = 1000 while True : js = "var q=document.getElementsByClassName('cdk-virtual-scroll-viewport')[0].scrollTop={}" . format ( x) browser. execute_script( js) time. sleep( 0.5 ) x += ycheck_height = browser. execute_script( "return document.getElementsByClassName('cdk-virtual-scroll-viewport')[0].scrollTop;" ) if check_height == temp_height: break temp_height = check_height
target = driver. find_element_by_id( 'id' )
driver. execute_script( "arguments[0].scrollIntoView();" , target)
参数 "arguments[0].scrollIntoView();" :这是一个 JavaScript 语句,调用了 scrollIntoView( ) 方法。arguments[ 0 ] 是一个特殊的数组,包含了传递给 execute_script 方法的所有额外参数,在这里它引用了 target WebElement。参数 target:这是传递给 execute_script 方法的第二个参数,即前面找到的那个 WebElement 对象。execute_script 方法会将这个 WebElement 对象作为 arguments[ 0 ] 传递给 JavaScript 代码,从而使得 scrollIntoView( ) 方法作用于该元素。
7、xpath方法
表达式 描述 nodename 选取此节点的所有子节点(div) / 从根节点选取 // 选择任意位置的某个节点 . 选取当前节点
通配符 描述 * 匹配任何元素节点 @* 匹配任何属性节点 node() 匹配任何类型节点
// button[ text( ) = "登录" ]
// button[ contains( text( ) , “登录”) ] 、// button[ contains( @class , “btn”) ]
// input [ starts- with ( @id , “login- ”) ] 、// input [ ends- with ( @id , “ogin- email”) ]
// input [ @name= “phone” and @datatype= “m”]
轴定位
描述 表达式 定位当前节点后的所有节点 //标签名[@属性=属性值]/follow::标签名[@属性=属性值] 定位同一节点后的所有同级节点 //标签名[@属性=属性值]/follow-sibling::标签名[@属性=属性值]
定位当前节点的所有子节点 //标签名[@属性=属性值]/child::标签名[@属性=属性值] 定位当前节点前的所有节点 //标签名[@属性=属性值]/preceding::标签名[@属性=属性值]
定位同一个节点前的所有同级节点 //标签名[@属性=属性值]/preceding-sibling::标签名[@属性=属性值] 定位当前节点的所有父节点 //标签名[@属性=属性值]/parent::标签名[@属性=属性值]
定位当前节点的所有祖父节点 //标签名[@属性=属性值]/ancestor::标签名[@属性=属性值]
xpath= '//span[text()=' '/ancestor::div[3]/check-box]'
element= browser. find_element( by= By. XPATH, value= xpath)
// span[ text( ) = '' ] : 选择所有文本内容为空的< span> 元素。
/ ancestor: : div[ 3 ] : 从选定的< span> 元素向上查找其第三个祖先< div> 元素。
/ check- box: 从选定的第3 个祖先< div> 元素中选择< check- box> 元素。
8、