0

0

使用更简洁的方式在 Selenium 中定位元素

霞舞

霞舞

发布时间:2025-10-19 09:34:32

|

960人浏览过

|

来源于php中文网

原创

使用更简洁的方式在 selenium 中定位元素

本文旨在帮助开发者在使用 Selenium 进行网页元素定位时,摆脱冗长复杂的 XPath 表达式,转而使用更简洁、高效的 CSS 选择器。通过具体示例,展示如何利用页面结构和元素属性,编写易于维护和理解的定位策略,提升自动化测试脚本的稳定性和可读性。

在使用 Selenium 进行网页自动化操作时,精准且高效地定位页面元素至关重要。冗长且硬编码的 XPath 表达式不仅难以维护,而且在页面结构发生变化时容易失效。本文将探讨如何利用 CSS 选择器简化元素定位,并提供代码示例。

利用 CSS 选择器简化元素定位

CSS 选择器相比 XPath,通常更加简洁易懂,并且在性能上略有优势。它们基于元素的标签名、类名、ID、属性等特征来定位元素。以下是一些常用的 CSS 选择器及其用法:

  • ID 选择器: 使用 # 符号,例如 #elementId。
  • 类选择器: 使用 . 符号,例如 .className。
  • 标签选择器: 直接使用标签名,例如 div。
  • 属性选择器 使用 [] 符号,例如 [attribute=value]。
  • 后代选择器: 使用空格分隔,例如 div p (选择 div 元素内的所有 p 元素)。
  • 子元素选择器: 使用 > 符号,例如 div > p (选择 div 元素的直接子元素 p)。

示例:简化 CoinMarketCap 链接抓取

假设我们需要从 CoinMarketCap 网站的表格中抓取所有加密货币的链接。原始代码可能使用了冗长的 XPath 表达式:

CSS3圆形图片鼠标经过旋转效果
CSS3圆形图片鼠标经过旋转效果

CSS3圆形图片鼠标经过旋转效果,图片上有简短标题和说明,兼容主流浏览器,php中文网推荐下载! 使用方法: 1、在head区域引入样式表文件lrtk.css 2、在你的网页中加入注释区域代码即可 3、图片为方形,宽高在220像素以上,并有一定空白边距效果较好。

下载
from selenium import webdriver
from selenium.webdriver.common.by import By

def get_all_links(driver):
    """
    Return a list of links from the webpage
    """
    prop_container = driver.find_element(by=By.XPATH, value='//*[@id="__next"]/div/div[1]/div[2]/div/div[1]/div[4]/table')
    table_body_container = prop_container.find_element(by=By.XPATH, value='./tbody')
    table_row_list = table_body_container.find_elements(by=By.XPATH, value='./tr')

    link_list = []

    for crypto in table_row_list:
        a_tag = crypto.find_element(by=By.TAG_NAME, value='a')
        link = a_tag.get_attribute('href')
        link_list.append(link)


    return link_list

# 示例使用
driver = webdriver.Chrome()  # 替换为你的 WebDriver
driver.get("https://coinmarketcap.com/")
links = get_all_links(driver)
print(links)
driver.quit()

通过分析页面结构,我们可以发现表格位于 ID 为 section-coin-markets 的 section 中,并且所有链接都具有类名 cmc-link。因此,我们可以使用以下 CSS 选择器简化定位:

from selenium import webdriver
from selenium.webdriver.common.by import By

def get_all_links_optimized(driver):
    """
    Return a list of links from the webpage using CSS selectors.
    """
    table_row_list = driver.find_elements(By.CSS_SELECTOR, '#section-coin-markets tbody tr')

    link_list = []

    for crypto in table_row_list:
       a_tag = crypto.find_element(By.CSS_SELECTOR, 'a.cmc-link')
       link = a_tag.get_attribute('href')
       link_list.append(link)

    return link_list

# 示例使用
driver = webdriver.Chrome()  # 替换为你的 WebDriver
driver.get("https://coinmarketcap.com/")
links = get_all_links_optimized(driver)
print(links)
driver.quit()

这段代码首先使用 #section-coin-markets tbody tr 定位表格中的每一行,然后使用 a.cmc-link 定位每行中的链接。

注意事项

  • 动态页面: 如果页面内容是动态加载的,可能需要使用 WebDriverWait 等待元素加载完成。
  • 唯一性: 确保 CSS 选择器具有足够的唯一性,以避免定位到错误的元素。可以使用开发者工具检查选择器的匹配结果。
  • 可维护性: 尽量选择稳定的页面元素属性进行定位,例如 ID 或固定的类名,以提高脚本的稳定性。

总结

使用 CSS 选择器可以显著简化 Selenium 中的元素定位,提高代码的可读性和可维护性。通过熟练掌握 CSS 选择器的各种用法,可以编写出更加高效、稳定的自动化测试脚本。在实际应用中,建议结合页面结构和元素属性,选择最合适的定位策略。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
PHP 命令行脚本与自动化任务开发
PHP 命令行脚本与自动化任务开发

本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

42

2025.12.13

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

30

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

7

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

23

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

2

2026.01.31

漫画防走失登陆入口大全
漫画防走失登陆入口大全

2026最新漫画防走失登录入口合集,汇总多个稳定可用网址,助你畅享高清无广告漫画阅读体验。阅读专题下面的文章了解更多详细内容。

8

2026.01.31

php多线程怎么实现
php多线程怎么实现

PHP本身不支持原生多线程,但可通过扩展如pthreads、Swoole或结合多进程、协程等方式实现并发处理。阅读专题下面的文章了解更多详细内容。

1

2026.01.31

php如何运行环境
php如何运行环境

本合集详细介绍PHP运行环境的搭建与配置方法,涵盖Windows、Linux及Mac系统下的安装步骤、常见问题及解决方案。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php环境变量如何设置
php环境变量如何设置

本合集详细讲解PHP环境变量的设置方法,涵盖Windows、Linux及常见服务器环境配置技巧,助你快速掌握环境变量的正确配置。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

CSS教程
CSS教程

共754课时 | 25.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号