Selenium
Selenium
Selenium 是一个强大的自动化测试工具,广泛应用于浏览器自动化。
核心执行原理:采用 C/S 架构,将编写的客户端脚本通过HTTP请求,调用 WebDriver 服务端的 API,然后 WebDriver 服务端将这些指令发送给浏览器驱动(Browser Driver),浏览器驱动再调用浏览器的原生 API 来执行操作,从而达到代码脚本来控制浏览器的行为。
简单来说,Selenium 本质上是通过 WebDriver 与浏览器驱动交互,驱动浏览器按照预设的步骤执行 UI 操作。
核心组成:
-
Selenium Client:编写的 Selenium 测试脚本,会调用 WebDriver API,例如打开网页、点击按钮、输入文本等。
-
WebDriver Server:是一个 HTTP 服务,它接收来自测试脚本的 HTTP 请求,然后将这些指令传递给 浏览器驱动。
-
Browser Driver:每个浏览器都有一个对应的 驱动程序,浏览器驱动会根据 WebDriver 指令,调用浏览器的 原生 API 来执行操作,由浏览器厂商提供。
- Chrome 浏览器 →
chromedriver - Firefox 浏览器 →
geckodriver - Edge 浏览器 →
msedgedriver
- Chrome 浏览器 →
-
Browser:浏览器接收到来自驱动的指令后,执行对应的操作。
Python安装Selenium依赖:
pip install selenium |
Web Driver¶
在进行模拟操作浏览器之前需要先创建WebDriver对象,通过该对象来驱动对应的浏览器。
注意:Browser Driver和浏览器的版本需要一致;如果没有显式指定service,Selenium会从环境变量、默认路径或通过WebDriverManager来启动Driver,WebDriverManager它会帮助你自动下载并管理ChromeDriver,并在运行时自动启动对应的驱动。
Web Driver对象的创建:
from selenium import webdriver |
Driver 常用属性:
-
driver.title:获取当前页面的标题。 -
driver.current_url:获取当前页面的 URL。 -
driver.page_source:获取当前页面的完整 HTML 源代码。 -
driver.current_window_handle:获取当前浏览器窗口的句柄。 -
driver.window_handles:获取所有打开的浏览器窗口句柄。
Driver 常用方法:
-
driver.get(url):打开一个网页。 -
driver.maximize_window():最大化浏览器窗口。 -
driver.minimize_window():最小化浏览器窗口。 -
driver.set_window_size(width, height):设置浏览器窗口的大小。 -
driver.set_window_position(x, y):设置浏览器窗口的位置。 -
driver.implicitly_wait(time):设置隐式等待时间。 -
driver.forward():浏览器前进。 -
driver.back():浏览器后退。 -
driver.refresh():刷新页面。 -
driver.quit():关闭浏览器并结束 WebDriver 会话。 -
driver.close():关闭当前浏览器窗口。 -
driver.switch_to.window(window_name):切换到指定窗口。
driver.switch_to.alert:切换到指定弹窗。
driver.switch_to.frame(iframe_element):切换到指定内敛框架。
driver.switch_to.parent_frame():切换到其父级框架。 -
driver.switch_to.default_content():切换回到主文档。 -
driver.get_current_url():获取当前页面的 URL。 -
driver.get_title():获取当前页面的标题。 -
driver.save_screenshot(filename):截图并保存为png图片。
By¶
在模拟操作之前需要先捕获页面的元素,driver拥有八大定位方式。
-
By.ID:按 ID 定位元素。 -
By.NAME:按 NAME 定位元素。 -
By.CLASS_NAME:按类名定位元素。 -
By.TAG_NAME:按标签名定位元素。 -
By.XPATH:按 XPath 定位元素。 -
By.CSS_SELECTOR:按 CSS 选择器定位元素。 -
By.LINK_TEXT:按完整的链接文本来定位超链接元素。 -
By.PARTIAL_LINK_TEXT:按部分链接文本来定位超链接元素。
示例:
from selenium.webdriver.common.by import By |
WebElement¶
网页元素的对象,通过它可以与页面上的元素进行交互。
常用属性:
-
element.text:获取元素的文本内容。 -
element.size:获取元素大小。 -
element.id:获取元素的ID。 -
element.tag_name:获取元素的标签名。 -
element.location:获取元素的位置x,y。 -
element.parent:获取元素的父元素。 -
element.rect:获取元素的位置和大小。
常用方法:
-
element.click():点击元素。 -
element.send_keys(keys):向输入框发送按键。 -
element.clear():清除输入框内容。 -
element.get_attribute("attribute_name"):获取元素的属性值。 -
element.text:获取元素的文本内容。 -
element.is_displayed():检查元素是否可见。 -
element.is_enabled():检查元素是否可用(是否处于激活状态)。 -
element.is_selected():检查元素是否被选中(适用于复选框等)。 -
element.submit():提交表单。
Select¶
selenium.webdriver.support.ui.Select 用于操作下拉框。
-
select_by_visible_text("option_text"):通过文本选择。 -
select_by_index(option_index):通过索引选择。 -
select_by_value("option_value"):通过项值选择。
示例:
from selenium.webdriver.support.ui import Select |
Alert¶
selenium.webdriver.common.alert.Alert 用于操作弹窗。
-
text:获取弹窗文本。 -
send_keys():向弹窗发送按键。 -
accept():接受确认弹窗。 -
dismiss():拒绝取消弹窗。
Keys¶
selenium.webdriver.common.keys.Keys 用于模拟键盘。
-
Keys.ENTER:模拟 Enter 键。 -
Keys.TAB:模拟 Tab 键。 -
Keys.BACKSPACE:模拟 Backspace 键。 -
Keys.ESCAPE:模拟 Escape 键。 -
Keys.SPACE:模拟 空格键。 -
Keys.UP:模拟 向上箭头键。 -
Keys.DOWN:模拟 向下箭头键。 -
Keys.LEFT:模拟 向左箭头键。 -
Keys.RIGHT:模拟 向右箭头键。 -
Keys.SHIFT:模拟 Shift 键。 -
Keys.CONTROL:模拟 Ctrl 键。 -
Keys.ALT:模拟 Alt 键。 -
Keys.CAPS_LOCK:模拟 Caps Lock 键。 -
Keys.F1 -Keys.F12:模拟 F1 到 F12 键。
WebDriverWait¶
selenium.webdriver.support.ui.WebDriverWait 用于显式等待元素加载。
-
until():用于等待某个条件为 True。 -
until_not():用于等待某个条件 False。
Expected Conditions¶
selenium.webdriver.support.expected_conditions 用于配合 WebDriverWait 来实现显式等待。
-
presence_of_element_located(locator):等待元素在 DOM 中存在(无论是否可见)。 -
visibility_of_element_located(locator):等待元素在页面上可见(元素必须在 DOM 中存在且可见)。 -
visibility_of(element):等待某个已定位的元素在页面上可见(元素已经被找到并且可见)。 -
element_to_be_clickable(locator):等待元素可点击(元素必须可见且可交互,即不被禁用)。 -
element_to_be_clickable(element):等待某个已定位的元素可点击。 -
staleness_of(element):等待元素从页面中被移除或变得过时(例如页面重新加载时)。 -
invisibility_of_element_located(locator):等待元素不可见(即元素被删除或隐藏)。 -
invisibility_of_element(element):等待已定位的元素不可见。 -
text_to_be_present_in_element(locator, text):等待指定元素的文本内容与给定的文本匹配。 -
text_to_be_present_in_element_value(locator, text):等待指定元素的value 属性值包含给定的文本(常用于表单输入框)。 -
frame_to_be_available_and_switch_to_it(locator):等待iframe 元素加载并切换到该iframe。 -
alert_is_present():等待页面上出现alert 弹框。
示例:
import time |
显式等待:等待指定的元素,在达到某个特定的条件或超时后,才继续执行。
隐式等待:等待所有页面加载完成或超时后,才继续执行。
强制等待:无条件让程序暂停指定时间,等时间到了,才继续执行。
ActionChains¶
selenium.webdriver.ActionChains 用于模拟鼠标和键盘操作的类,可以进行复杂的用户行为模拟。
点击事件:
click(on_element=None):在指定元素上单击。如果没有指定元素,则在当前鼠标位置单击。-
click_and_hold(on_element=None):在指定的元素上点击并保持按下状态。释放需要使用release()方法。 -
release(on_element=None):释放鼠标按键,通常在调用click_and_hold()后使用。 -
context_click(on_element=None):右键点击指定的元素。如果没有指定元素,则在当前鼠标位置右键点击。 -
double_click(on_element=None):双击指定的元素。如果没有指定元素,则在当前鼠标位置双击。
移动事件:
-
move_to_element(to_element):将鼠标移动到指定元素上。 -
move_to_element_with_offset(to_element, xoffset, yoffset):将鼠标移动到指定元素的相对坐标。 -
drag_and_drop(source, target):将元素从source位置拖动到target位置。 -
drag_and_drop_by_offset(source, xoffset, yoffset):将元素从source位置拖动到指定的偏移位置。
键盘事件:
-
send_keys(*keys_to_send):向当前元素发送键盘输入。 -
send_keys_to_element(element, *keys_to_send):向指定的元素发送键盘输入。 -
key_down(value, element=None):按下指定的键盘键。如果element被提供,则在该元素上按下。 -
key_up(value, element=None):释放指定的键盘键。如果element被提供,则在该元素上释放。
滚动条事件:
-
scroll_by_amount(x, y):以指定的数量(x轴和y轴)滚动页面。 -
scroll_to_element(element):滚动页面直到指定的元素可见。
其他事件:
-
pause(seconds):在操作之间插入一个指定秒数的暂停,常用于调试或模拟用户的思考时间。 -
perform():执行所有队列中的操作。可以通过在所有操作之后调用此方法来执行动作链。 -
release():释放所有按住的鼠标按钮。
示例:
from selenium.webdriver import ActionChains |


