当前位置: 首页 > news >正文

selenium一些进阶方法如何使用

浏览器高级配置

设置浏览器无头模式(Headless Chrome/Firefox):

from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--headless=new')
driver = webdriver.Chrome(options=options)

自定义用户代理和窗口大小:

options.add_argument('--user-agent=CustomAgent')
options.add_argument('--window-size=1920,1080')

元素高级定位

XPath高级定位示例(包含动态属性处理):

# 包含特定文本
element = driver.find_element(By.XPATH, "//*[contains(text(),'动态文本')]")# 多条件组合定位
element = driver.find_element(By.XPATH, "//div[@class='list' and @data-id>100]")# 轴定位(查找兄弟节点)
sibling = driver.find_element(By.XPATH, "//div[@id='target']/following-sibling::div[1]")

CSS选择器高级用法:

# 属性值部分匹配
element = driver.find_element(By.CSS_SELECTOR, "[class*='partial']")# 子元素选择
element = driver.find_element(By.CSS_SELECTOR, "ul.items > li:first-child")

复杂交互操作

处理动态加载内容(显式等待结合EC条件):

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "dynamicElement"))
)

鼠标动作链(复杂拖拽操作):

from selenium.webdriver.common.action_chains import ActionChains
source = driver.find_element(By.ID, "source")
target = driver.find_element(By.ID, "target")
ActionChains(driver).drag_and_drop(source, target).perform()

文件处理

文件上传(无需GUI交互):

file_input = driver.find_element(By.CSS_SELECTOR, "input[type='file']")
file_input.send_keys("/absolute/path/to/file.txt")

文件下载配置(Chrome示例):

options = webdriver.ChromeOptions()
prefs = {"download.default_directory": "/path/to/downloads","download.prompt_for_download": False
}
options.add_experimental_option("prefs", prefs)

性能优化

禁用图片加载提升速度:

chrome_options = webdriver.ChromeOptions()
prefs = {"profile.managed_default_content_settings.images": 2}
chrome_options.add_experimental_option("prefs", prefs)

网络请求拦截(Chrome DevTools协议):

driver.execute_cdp_cmd('Network.enable', {})
driver.execute_cdp_cmd('Network.setBlockedURLs', {'urls': ['*.png', '*.gif']})

多窗口/框架处理

窗口切换控制:

main_window = driver.current_window_handle
driver.switch_to.window(new_window_handle)
# 操作结束后切回主窗口
driver.switch_to.window(main_window)

嵌套iframe处理:

driver.switch_to.frame("frameName")
driver.switch_to.frame(0)  # 通过索引切换
driver.switch_to.default_content()  # 返回主文档

高级验证机制

页面完全加载检测:

WebDriverWait(driver, 30).until(lambda d: d.execute_script("return document.readyState") == "complete"
)

AJAX请求完成检测:

WebDriverWait(driver, 10).until(lambda d: d.execute_script("return jQuery.active == 0")
)

异常处理

智能重试机制:

from selenium.common.exceptions import StaleElementReferenceException
retries = 3
for attempt in range(retries):try:element.click()breakexcept StaleElementReferenceException:if attempt == retries - 1: raise

分布式测试

Selenium Grid配置:

from selenium.webdriver.remote.webdriver import WebDriver
hub_url = "http://hub_host:4444/wd/hub"
capabilities = {"browserName": "chrome","platform": "LINUX"
}
driver = WebDriver(command_executor=hub_url, desired_capabilities=capabilities)

http://www.xdnf.cn/news/1341613.html

相关文章:

  • K8s快速上手-微服务篇
  • 机器学习中的聚类与集成算法:从基础到应用
  • 前端视频流处理从 0 到 “能跑”:可复制 Demo+WebGL/Worker 优化,覆盖会议 / 直播 / 监控场景
  • 【尝试】在macOS上安装cvat
  • 【51单片机】【protues仿真】基于51单片机水位监测系统
  • 鸿蒙开发中的List组件详解
  • 机器学习-集成算法
  • Django的生命周期
  • 项目1总结其三(图片上传功能)
  • leetcode-python-242有效的字母异位词
  • 阿里巴巴推出Qoder:面向真实软件开发的智能编程平台
  • 计算机视觉(opencv)实战六——图像形态学(腐蚀、膨胀、开运算、闭运算、梯度、顶帽、黑帽)
  • 计算机视觉第一课opencv(三)保姆级教学
  • 大语言模型原理(Transformer架构)
  • c# 和 c++ 怎样结合
  • Chrome 插件开发实战:从入门到进阶
  • Docker:安装配置
  • 【框架篇二】FastAPI路由与请求处理
  • Linux 网络命令大全
  • uniapp 自定义组件封装、easycom匹配规则
  • 2025-08-21 Python进阶4——错误和异常
  • 用 Python 写的自动化测试 WPF 程序的一个案例
  • 【GaussDB】使用gdb定位GaussDB编译package报错
  • Spring Boot整合Amazon SNS实战:邮件订阅通知系统开发
  • 第三阶段数据库-6:sql中函数,多表查询,运算符,索引,约束
  • 我从零开始学微积分(2)- 函数与图形
  • 与森马品牌代言人王安宇专注日常力量,再启新常服故事
  • Qt二维码生成器项目开发教程 - 从零开始构建专业级QR码生成工具
  • 精算中的提升曲线(Lift Curve)与机器学习中的差别
  • Design Compiler:逻辑库名与逻辑库文件名及其指定方式