Selenium简介
用于Web 应用程序的自动化测试,允许用户控制浏览器执行自动化任务,例如点击按钮、填写表单、验证页面内容等。
Selenium 特点
- 跨浏览器支持:Selenium 支持多种主流浏览器,如 Chrome、Firefox、Safari、Internet Explorer 等,可以在不同浏览器中执行相同的测试脚本
- 多语言支持:Selenium 支持多种编程语言,如 Java、Python、C#、Ruby、JavaScript 等,开发者可以用自己熟悉的语言来编写测试脚本。
- 自动化Web交互:Selenium 可以模拟真实用户的操作,如点击、滚动、键盘输入等。
更多请查看Selenium 简介 | 菜鸟教程
Selenium 安装
本系列教程将以 Python 为例进行讲解
- 打开命令行,输入以下命令来安装 Selenium:
pip install selenium # 更换阿里云镜像源下载 pip install selenium -i https://mirrors.aliyun.com/pypi/simple/ - 下载浏览器驱动
下载适合你浏览器版本的驱动,并将其路径添加到系统的环境变量中,或者将驱动文件放在 Python 脚本所在的目录下。
- Chrome: ChromeDriver,ChromeDriver 的说明参见:ChromeDriver 介绍。
- Firefox: GeckoDriver
- Edge: EdgeDriver
Selenium的使用
启动selenium
以selenium4为例,selenium4引入了 Service 对象和进一步规范化了 Options 对象的使用。
-
Service对象:指定 浏览器驱动Driver 的路径,替代直接路径配置,提升稳定性。 -
Options对象:用于配置浏览器的启动选项,统一浏览器配置接口,支持更多特性。
- 导入所需的模块(
webdriver和ChromeService)。from selenium import webdriver from selenium.webdriver.chrome.service import Service # as ChromeService -
创建
ChromeService对象,指定 ChromeDriver 的路径(替代直接路径配置,提升稳定性)service=Service('./chromedriver.exe') #该驱动的位置与python脚本在同一目录下,chromedriver.exe是驱动的名称 - 创建
ChromeOptions对象,用于配置浏览器的启动选项。# 启动 Chrome 浏览器 options = webdriver.ChromeOptions() # 防止浏览器自动关闭 options.add_experimental_option("detach", True) # 移除 "Chrome 正受到自动测试软件控制" 的提示 options.add_experimental_option("excludeSwitches", ["enable-automation"]) - 使用
webdriver.Chrome()启动 Chrome 浏览器,并传入service和options参数。browser = webdriver.Chrome(service=service, options=options) - 测试:打开百度界面
browser.get('https://www.baidu.com')
关闭浏览器
使用 quit() 方法关闭浏览器并结束 WebDriver 会话:
browser.quit()
打开指定的网页:
browser.get("https://www.example.com")
关闭当前网页:
browser.close()
前进和后退:
使用 back() 方法返回上一个页面,使用 forward() 方法前进到下一个页面。
browser.get("https://www.baidu.com")
browser.get("https://www.runoob.com")
browser.back() # 返回 baidu.com
browser.forward() # 前进到 runoob.com
刷新页面:
browser.refresh()
获取页面标题:
title = browser.title
print("页面标题:", title)
获取当前 URL:
url = browser.current_url
print("当前 URL:", url)
浏览器窗口操作
最大化窗口:
browser.maximize_window()
最小化窗口:
browser.minimize_window()
设置窗口大小:
browser.set_window_size(1024, 768) # 设置窗口大小为 1024x768 像素
全屏模式:
browser.fullscreen_window()
Selenium 元素定位
在 Selenium 中,元素定位是自动化测试和网页操作的核心,元素定位是指通过某种方式找到网页中的特定元素。
定位一个元素使用find_element(by,value),返回一个元素;
定位多个元素使用find_elements(by,value),返回一个列表。用一个列表去接收。
导入:
from selenium.webdriver.common.by import By
定位方式by
- 通过元素的 id 属性定位,find_element(By.ID, "id_value"),在CSS中id值是唯一的
element = browser.find_element(By.ID, "username") -
通过 CSS 选择器定位,find_element(By.CSS_SELECTOR, "css_selector")
element = browser.find_element(By.CSS_SELECTOR, "input#username") # input#username具体的值可以在开发者工具中,选择对应的元素后,右键,复制,复制selector - 通过相对XPATH地址定位,find_element(By.XPATH, "xpath_expression")
element = driver.find_element(By.XPATH, "//input[@id='username']")
相对XPATH地址的确定:


①/表示从body的子节点查找,//表示从body的孙节点(及以下节点)查找,.//表示从当前元素(job)的孙节点开始查找
②contains()是 XPath 的一个字符串匹配函数,用于检查某个属性是否包含指定的子字符串。适用于class属性有多个值
比如class=job-title clearfix,不能直接使用@class=job-title clearfix(空格后的内容会被忽略),可以使用normalize-space(@class)='job-title highlight',或者使用contains()函数,
div[contains(@class,’job-title’)]
Selenium元素操作
假设element通过上述操作获取到元素
获取元素文本
element.text
获取元素属性
element.get_attribute("value")
# value=src,可以获取图像
# value=href,可以获取链接
# value=class,可以获取class属性值
# html标签中的属性值都可以获取
输入文本
element.send_keys('输入你的文本') #适用于输入框元素
点击元素
element.click() # 适用于按钮、超链接、单选框、多选框
清除输入框内容
element.clear()
单选框操作
# 如果单选框未被选中,则点击选中
if not element.is_selected():
element.click()
复选框操作
if not element.is_selected():
element.click()
下拉列表操作(Select类)
# 导入
from selenium.webdriver.support.select import Select
# 创建Select对象
s=Select(element)
# 1.通过可见文本选择选项
s.select_by_visible_text("Option 1")
# 2.通过值选择选项
s.select_by_value("1")
# 3.通过索引选择选项
s.select_by_index(0)
Selenium 浏览器操作
处理iframe
iframe 是嵌入在网页中的另一个网页(这个界面是嵌套在原页面中的)
# 切换到iframe
browser.switch_to.frame("iframe_name")
# 在iframe中查找相关元素
# 切换回原页面
browser.switch_to.default_content()
切换标签页
一个窗口可以跳转到不同的标签页,或者是打开了新的浏览器窗口(只要是网址发生了变化)
for window_handle in browser.window_handles:
browser.switch_to.window(window_handle)
if '标签页关键字' in browser.title:
break
# 标签页关键字看页面的标题

15万+

被折叠的 条评论
为什么被折叠?



