graph TD
A[Selenium WebDriver] --> B[浏览器驱动]
A --> C[编程语言绑定]
A --> D[Grid分布式]
C --> E[Python]
C --> F[Java]
B --> G[ChromeDriver]
B --> H[GeckoDriver]
D --> I[多节点并发]
# 安装Python库
pip install selenium
# 浏览器驱动管理工具
pip install webdriver-manager
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
# 自动下载并配置Chrome驱动
service = webdriver.ChromeService(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
浏览器 | 驱动获取方式 | 典型应用场景 |
---|---|---|
Chrome | 官方Chromedriver | 主流测试环境 |
Firefox | Geckodriver | 兼容性验证 |
Edge | MSEdgeDriver | Windows生态测试 |
Safari | 系统内置 | Mac设备专属 |
# ID定位
driver.find_element(By.ID, "username")
# CSS选择器
driver.find_element(By.CSS_SELECTOR, ".login-form input[type='password']")
# 文本内容定位
//button[contains(text(),'提交')]
# 层级关系定位
//div[@id='header']/ul/li[position()>2]
# 传统input标签
file_input = driver.find_element(By.XPATH, "//input[@type='file']")
file_input.send_keys("/path/to/file.pdf")
# 复杂控件处理(需AutoIT或PyWin32)
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
element = wait.until(
EC.element_to_be_clickable((By.ID, "dynamicButton"))
)
class element_has_css_class(object):
def __init__(self, locator, css_class):
self.locator = locator
self.css_class = css_class
def __call__(self, driver):
element = driver.find_element(*self.locator)
if self.css_class in element.get_attribute("class"):
return element
return False
# 使用自定义等待
wait.until(element_has_css_class((By.ID, "status"), "active"))
class LoginPage:
def __init__(self, driver):
self.driver = driver
self.username_field = (By.ID, "username")
self.password_field = (By.ID, "password")
self.submit_btn = (By.XPATH, "//button[@type='submit']")
def login(self, username, password):
self.driver.find_element(*self.username_field).send_keys(username)
self.driver.find_element(*self.password_field).send_keys(password)
self.driver.find_element(*self.submit_btn).click()
import pytest
@pytest.mark.parametrize("username,password,expected", [
("admin", "123456", "Dashboard"),
("test", "wrongpass", "Invalid Credentials")
])
def test_login(driver, username, password, expected):
login_page = LoginPage(driver)
login_page.login(username, password)
assert expected in driver.title
# 启动Hub
java -jar selenium-server.jar hub
# 注册Node
java -jar selenium-server.jar node --hub http://hub-host:4444
from selenium.webdriver import Remote
caps = {
"browserName": "chrome",
"version": "latest",
"platform": "WINDOWS",
"cloud:options": {
"screenResolution": "1920x1080"
}
}
driver = Remote(
command_executor="CLOUD_PROVIDER_URL",
desired_capabilities=caps
)
# 人工介入模式
input("请在浏览器完成验证码后按回车继续...")
# 第三方服务集成
from anticaptchaofficial.recaptchav2proxyless import *
solver = recaptchaV2Proxyless()
solver.set_verbose(1)
solver.set_key("API_KEY")
result = solver.solve_and_return_solution("SITE_KEY", "PAGE_URL")
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless") # 无头模式
chrome_options.add_argument("--disable-gpu") # 禁用GPU加速
chrome_options.add_argument("--no-sandbox") # 容器环境必备
from selenium.webdriver import Chrome
from selenium.webdriver.common.proxy import Proxy
dev_tools = driver.get_devtools()
dev_tools.send("Network.enable")
dev_tools.send("Network.setRequestInterception", {"patterns": [{"urlPattern": "*"}]})
def intercept_request(request):
if "ad.jpg" in request.url:
dev_tools.send("Network.continueInterceptedRequest", {
"interceptionId": request.interception_id,
"errorReason": "BlockedByClient"
})
dev_tools.add_listener("Network.requestIntercepted", intercept_request)
from appium import webdriver
desired_caps = {
"platformName": "Android",
"deviceName": "emulator-5554",
"appPackage": "com.example.app",
"appActivity": ".MainActivity"
}
driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
# 使用CV识别元素
from selenium_ai import SmartDriver
smart_driver = SmartDriver(driver)
element = smart_driver.find_element_by_image("submit_button.png")
问题:元素定位失效
问题:浏览器崩溃
graph LR
A[基础语法] --> B[元素定位]
B --> C[框架设计]
C --> D[分布式测试]
D --> E[移动端扩展]
E --> F[AI整合]
配套资源:
如需获取完整示例代码包、浏览器配置手册、性能优化白皮书,可通过以下方式获取:
# 自动下载学习资源
import requests
url = "https://selenium-resources.com/download"
params = {
"type": "fullpack",
"license": "education"
}
response = requests.get(url, params=params)
with open("selenium_master.zip", "wb") as f:
f.write(response.content)
这篇文章全面解析了Python Selenium库的核心技术与应用实践,从环境配置、元素定位(涵盖ID、CSS、XPath等八种方法)、表单操作及文件上传等基础操作入手,逐步深入至显式等待策略、Page Object设计模式、数据驱动测试等高级应用,并探讨了企业级场景下的分布式测试集群搭建、云平台集成及验证码处理方案。通过性能优化技巧(如无头模式、网络监控)和移动端与AI结合的扩展生态,展示了Selenium的多样化潜力,同时总结了十大最佳实践与常见问题解决方案,为读者提供了从入门到精通的系统化学习路径和进阶资源,助力实现高效、稳定的Web自动化测试与开发。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。