欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > Selenium是广泛使用的模拟浏览器运行的库

Selenium是广泛使用的模拟浏览器运行的库

2025/4/22 20:47:50 来源:https://blog.csdn.net/qq_40691438/article/details/144291607  浏览:    关键词:Selenium是广泛使用的模拟浏览器运行的库

简介

Selenium是广泛使用的模拟浏览器运行的库,它是一个用于Web应用程序测试的工具。 Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,并且支持大多数现代 Web 浏览器。

环境

安装

pip install selenium
下载Chrome驱动
系统环境配置添加驱动所在路径

基础用法

1、页面操作

  1. 初始化浏览器对象
from selenium import webdriver# Chrome浏览器
browser = webdriver.Chrome()
  1. 访问页面
from selenium import webdriver
import time# Chrome浏览器
browser = webdriver.Chrome()# # 指定绝对路径的方式(可选)
# path = r'绝对路径\chromedriver.exe'
# browser = webdriver.Chrome(path)browser.get("https://www.baidu.com")
  1. 前进后退
from selenium import webdriver
import time# Chrome浏览器
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()
  1. 获取页面基础属性
# 网页标题
print(browser.title)
# 当前网址
print(browser.current_url)
# 浏览器名称
print(browser.name)
# 网页源码
print(browser.page_source)

2、定位页面元素

属性函数
CLASSfind_element(by=By.CLASS_NAME, value=‘’)
XPATHfind_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=‘’)
CSSfind_element(by=By.CSS_SELECTOR, value=‘’)
IDfind_element(by=By.ID, value=‘’)

from selenium import webdriver
import time
from selenium.webdriver.common.by import By# Chrome浏览器
browser = webdriver.Chrome()browser.get("https://www.51kim.com/")
element = browser.find_element(by=By.CLASS_NAME, value="copyright").text
# element=browser.find_element(by=By.ID,value='kw').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# Chrome浏览器
browser = webdriver.Chrome()browser.get("https://www.xx.com/")time.sleep(2)# 创建 ActionChains 对象
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)## 模拟拖拽元素
# source_element = browser.find_element(By.ID, "source-id")
# target_element = browser.find_element(By.ID, "target-id")
# actions.drag_and_drop(source_element, target_element).perform()time.sleep(2)# 关闭浏览器
browser.quit()
move_to_element() 方法用于将鼠标移动到指定的 Web 元素上。
context_click() 方法用于模拟鼠标右键点击。
double_click() 方法用于模拟鼠标左键双击。
drag_and_drop() 方法用于模拟从一个元素到另一个元素的拖拽动作。

模拟键盘操作

# 创建 ActionChains 对象
actions = ActionChains(driver)# 查找输入框元素并发送文本
input_element = driver.find_element(By.ID, "input-id")
input_element.send_keys("Hello World")# 模拟按下回车键
input_element.send_keys(Keys.RETURN)# 模拟组合键(Ctrl + A)
actions.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()# 模拟组合键(Ctrl + C)复制
actions.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()# 移动到另一个输入框并粘贴(Ctrl + V)
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’)
键盘F1send_keys(Keys.F1)
import pyautogui
import time# 等待3秒,以便你有时间切换到想要输入的应用程序窗口
time.sleep(3)# 输入字符串
pyautogui.write('Hello World', interval=0.1)  # interval参数设置每个字符之间的间隔时间# 模拟按下回车键
pyautogui.press('enter')# 模拟组合键(Ctrl + A)
pyautogui.hotkey('ctrl', 'a')# 模拟组合键(Ctrl + C)复制
pyautogui.hotkey('ctrl', 'c')# 模拟组合键(Ctrl + V)粘贴
pyautogui.hotkey('ctrl', 'v')

4、延时等待

强制等待:就很简单了,直接time.sleep(n)强制等待n秒

隐式等待:implicitly_wait()设置等待时间,如果到时间有元素节点没有加载出来,就会抛出异常

显式等待:

5、对Cookie操作

# 启动浏览器驱动,这里以 Chrome 为例
driver = webdriver.Chrome()# 打开目标网站
driver.get('https://xxxxx.com')# 添加一个Cookie到当前页面会话中
cookie = {'name': 'example_cookie', 'value': 'example_value'}
driver.add_cookie(cookie)# 访问另一个页面或刷新当前页面以使新添加的Cookie生效
driver.refresh()
# 获取所有Cookies  集合
all_cookies = driver.get_cookies()# 获取特定名称的Cookie 也就是
# next() 函数用于从生成器中获取下一个项。如果生成器中有匹配的项,next() 将返回第一个满足条件的 Cookie 对象;如果没有找到任何匹配项,那么第二个参数 None 就会被返回,作为默认值。
specific_cookie = next((c for c in all_cookies if c['name'] == 'example_cookie'), None)
# 删除特定名称的Cookie
driver.delete_cookie('example_cookie')# 删除所有Cookies
driver.delete_all_cookies()

6、execute_script方法

def is_element_exist(browser,xpath):try:element=browser.find_element(by=By.XPATH,value=xpath)flag=Trueexcept:flag=Falsereturn flag
x = 1000
y = 1000while True:# 执行JavaScript来设置滚动位置js = "var q=document.getElementsByClassName('cdk-virtual-scroll-viewport')[0].scrollTop={}".format(x)# 允许你在当前浏览器会话中执行任意的 JavaScript 代码browser.execute_script(js)  # 修正拼写错误time.sleep(0.5)  # 等待页面加载新内容x += y# 获取当前滚动高度check_height = browser.execute_script("return document.getElementsByClassName('cdk-virtual-scroll-viewport')[0].scrollTop;")# 如果滚动高度没有变化,说明已经到达底部或没有更多可加载的内容if check_height == temp_height:  # 修正比较运算符breaktemp_height = check_height  # 更新临时高度
# 需要定位的元素是动态元素,或者我们不确定它在哪时,可以先找到这个元素然后再使用JS操作# 要查找的 HTML 元素的 id 属性值
target = driver.find_element_by_id('id')# arguments[0]:这是 execute_script 方法的第一个额外参数(即 target)
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”)]
# id是以login-开头的
//input[starts-with(@id,“login-)]//input[ends-with(@id,“ogin-email”)]# 根据一个元素的多个属性进行定位 name和datatype是属性
//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、

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词