Selenium 4.0 Intro

爬虫---》selenium4.0+使用 上面讲了selenium八大元素定位方式,但做自动化肯定不是一直写这样的python代码,因为时间与空间上都浪费人力,不如功能测试,所以我们需要学会去二次封装selenium。将其制定成规则化的自然代码来让自动化变得简单易懂。设计规则一、做自动化是模拟人的操作,所以有操作字段:点击、输入等二、定位元素需要定位方式,所以有定位器字段:id、name、class、tag、link、plink、xpath、css、js三、定位器有了,定位器的对象字段也要有。 阅读详情

Overview

I know it’s a cliche to say that it’s a “very great pleasure”, but, being honest with you, it genuinely is.

Selenium 4 不仅对前代版本做了稳定提升,还带来了大量令人兴奋的新功能,这能让我们的测试编写起来更有趣,也能在运行时更加稳定。

Authentication

Selenium 4.0 的一个重要更新是 身份验证 能力。

在过去,我们一直能使用 Selenium 处理一些「登录」请求,譬如通过定位特征元素(如 Input )来控制 Driver 进行定位(如 find_element_by_xpath() )、输入(如 send_key() )、提交(如 click() )完成身份验。然而,我们使用这套工作流处理一些特殊框架的站点(如 basic or digest authentication)时效果差强人意。因此,我们在使用 Selenium 处理难以应付的登录要求时,总会在启动前携带 cookie。

上述情况将在 Selenium 4.0 时代有所改观。我们可以通过调用 register 方法来添加 「username」以及 「password」或是其他 Token 执行身份认证任务,而无需再繁琐地定位元素发送消息或是与人机验证勾心斗角,「验证」行为由 Driver 底层实现。

如下 demo 演示了新方法的功能实现:

  • Java
// This "HasAuthentication" interface is the key!
HasAuthentication authentication (HasAuthentication) driver;

// You can either register something for all sites
authentication.register(() -> new UsernameAndPassword("admin", "admin"));

// Or use something different for specific sites
authentication.register(
  uri -> uri.getHost().contains("mysite.com"),
  new UsernameAndPassword("AzureDiamond", "hunter2"));
  
  • Ruby
driver.register(username: 'admin', password: 'admin')
  

当我们完成 add 添加操作后,每当站点要求或是 driver 加载出身份认证页面时,Selenium 会帮我们自动提供验证信息(如 username 与 password),这样的操作是隐式完成的。以往,我们可能需要单独开一条线程来应对随时可能出现的 「运行时身份认证」或是通过 「try…exception」机制主动捕获异常并调用相应的处理模块。

这个特性目前是基于 Selenium 4 的 CDP (Chrome DevTools Protocol)实现的,意味着此功能仅能运行在支持这个协议的浏览器上。值得一提的是,Selenium 旗下产品 WebDriver Bidi 的允许开发者在不支持 CDP 的浏览器使用这项功能,好消息是这个项目还未完整孵化出来,我们可以期待一下。

Relative Locators

相对定位器(Relative Locators)是一种基于「自然语言术语」的元素定位解决方案,开发者可通过诸如「上方」「下方」「左侧」「右边」等描述捕获那些「看得见但摸不着」的标记元素,这种描述可以适应 DOM 的变化。

这种方法背后的概念是允许开发者根据在页面上描述元素的方式来查找元素。更自然的说法是「find the element that is below the image」,而不是「find the INPUT inside the DIV with the "id " of “main”」 。通常,我们可以将此方案视为一种基于视觉的元素定位方法。

这套方法论最初由 Sahi 提出,这是一个极其强大的基于 低代码 实现的自动化测试平台,感兴趣的朋友可以了解以下。

我们以 Python 和 Java 举个例子,简要说明这个方案的强大之处。

Above

如下图是一个常见的登录页面,我们像找到位于密码字段上方的电子邮件地址字段。为此,我们通过其 id 找到密码字段,然后使用 relative locators 定位器捕获电子邮件字段。

Asset > Selenium 4 login-form-relative-locators
  • Python
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with
passwordField = driver.find_element(By.ID, "password")
emailAddressField = driver.find_element(locate_with(By.TAG_NAME,  "input").above(passwordField))
  • Java
import static org.openqa.selenium.support.locators.RelativeLocator.with;
WebElement password = driver.findElement(By.id("password"));
WebElement email = driver.findElement(with(By.tagName("input")).above(passwordField));

Below

反过来,让我们定位密码字段,它位于电子邮件地址字段下方。

  • Python
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with
emailAddressField = driver.find_element(By.ID, "email")
passwordField = driver.find_element(locate_with(By.TAG_NAME, "input").below(emailAddressField))
  • Java
import static org.openqa.selenium.support.locators.RelativeLocator.with;
WebElement emailAddressField = driver.findElement(By.id("email"));
WebElement passwordField = driver.findElement(with(By.tagName("input"))
                                          	.below(emailAddressField));

To the left Of

让我们考虑一下我们想要在「提交」按钮左侧找到元素的情况。

  • Python
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with
submitButton = driver.find_element(By.ID, "submit")
cancelButton = driver.find_element(locate_with(By.TAG_NAME, "button").
                               	to_left_of(submitButton))
  • Java
import static org.openqa.selenium.support.locators.RelativeLocator.with;
WebElement submitButton = driver.findElement(By.id("submit"));
WebElement cancelButton = driver.findElement(with(By.tagName("button"))
                                        	.toLeftOf(submitButton));

To the Right Of

现在我们将考虑相反的情况,我们希望找到「取消」按钮右侧的元素。

  • Python
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with
cancelButton = driver.find_element(By.ID, "cancel")
submitButton = driver.find_element(locate_with(By.TAG_NAME, "button").
                               	to_right_of(cancelButton))
  • Java
import static org.openqa.selenium.support.locators.RelativeLocator.with;
WebElement cancelButton = driver.findElement(By.id("cancel"));
WebElement submitButton = driver.findElement(with(By.tagName("button")).toRightOf(cancelButton));

Near

上文「适应 DOM 的变化」从何而来?我觉得 near function 是个非常重要的体现,它允许我们通过一定的规则指定所选取的元素周围 50px 以内的其他元素。小伙伴们首先想到什么?欸嘿我不说。官方文档中这一句不起眼的描述,可能在未来,成为万千依靠 Selenium 工作的工程师们实现财富自由的垫脚石。

回到话题,在这个案例中,我们可以通过先定位邮件标签,再通过寻找 input tag 的偏移量,最终定位邮件地址的输入框。

  • Python
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with

emailAddressLabel = driver.find_element(By.ID, "lbl-email")
emailAddressField = driver.find_element(locate_with(By.TAG_NAME, "input").
near(emailAddressLabel))
  • Java
import static org.openqa.selenium.support.locators.RelativeLocator.with;
WebElement emailAddressLabel = driver.findElement(By.id("lbl-email"));
WebElement emailAddressField = driver.findElement(with(By.tagName("input")).near(emailAddressLabel));

Enhancement

如果你使用 Firefox 或是其他基于 Chromium 的浏览器,Selenium 4 还提供了强大的增强特性。

除了上文介绍的 Authentication ,Selenium 4 还添加了 Network Interception(Are you an HTTP 418?)以及一些常见执行请求,如更加高效的「等待 DOM 变更」的方法,或是查看 Javascript 错误的方法等等。

值得一提的是,这些提升大都是基于现有 API 打磨的,意味着我们原先引用的函数方法无需改动,而我们只需升级版本 如 pip install --upgrade selenium ,这些库函数将被自动替换(如果是要使用原先没有的新功能我们当然得改代码)。

Selenium Grid

Selenium 重构了 Grid ,使其完全支持分布式,能够运行于 Kubernetes 等现代基础设施之上。

重构后的 Grid 可以管理本地机器上的 Docker 容器,提取诸如独立的 Firefox 服务器之类的镜像,这样我们的基础设施维护工作就会变得轻松一些。

最后, Grid 更加安全,也更加易于管理。Selenium 改进了 Grid 的UI,将其置于 GraphQL 模型上运行,任何人都可以自由查询并使用该模型来创建自己的可视化或 Grid 监视器。开发者可以使用 VNC 与正在运行的会话(session)进行交互,从而更好地了解到正在发生地事情。

Reference

Python自动化测试进阶:从Selenium到Playwright等高效替代方案全解析 浏览器自动化是现代软件开发和测试中的关键技术,它通过模拟用户操作实现对Web应用的自动化控制。其核心原理是利用浏览器调试协议或驱动接口与浏览器内核通信,执行页面导航、元素交互和数据提取等任务。这项技术的价值在于提升测试效率、确保应用质量,并广泛应用于UI自动化测试、网络爬虫和流程自动化等场景。随着Web应用复杂度的增加,传统的Selenium框架在性能、资源消耗和对现代Web技术的支持上逐渐显现不足,因此开发者开始寻求更高效的替代方案。本文聚焦于Playwright这一现代浏览器自动化利器,它通过直接集成C 阅读详情

相关推荐

Web自动化测试实战:从Selenium到Playwright的完整指南

Web自动化测试是软件工程中提升质量与效率的关键实践,其核心原理是通过脚本模拟用户操作,自动执行重复性验证任务。这项技术的核心价值在于实现快速反馈、降低回归成本,并释放人力进行更高价值的探索性测试。在技术选型上,Selenium作为行业标准提供了广泛的浏览器支持,而Cypress和Playwright等现代框架则凭借更优的开发者体验和稳定性成为新项目的热门选择。对于需要覆盖多浏览器、多设备的复杂场景,与LambdaTest、BrowserStack等云测平台集成能有效解决环境碎片化难题。无论是保障核心业务流

weixin_30562507的博客 385

selenium4.0的一些基本用法

1、初始化浏览器、刷新、最大化、后退、前进、截图 2、单个元素定位的方法selenium4使用的时候需要导入模块 from selenium.webdriver.common.by import Byfind_element(By.XPATH, "//*[@id='search']")find_element(By.CLASS_NAME, "element_class_name")find_element(By.ID,"element_id")find_element(By.NAME, "elem

weixin_48626846的博客 8776

基于Python与数据挖掘的外贸客户开发自动化系统Codex实践

这次我们来看一个专门用于外贸客户开发的工具——Codex。它不是传统的CRM或营销软件,而是一个结合了AI与数据挖掘,能直接从公开信息中批量、精准定位目标客户并生成深度分析报告的系统。本文将以“电梯”(Elevator)行业为例,演示如何用这套方法跑出85家潜在客户并完成22个维度的深度分析。 对于外贸业务员、独立站运营或SOHO创业者来说,最耗时的往往不是谈判,而是前期的客户寻找与背景调查。手动搜索效率低,数据零散,难以形成有效决策依据。Codex的思路是自动化这一过程:给定一个产品或行业关键词,它能自动

dgoh41514的博客 403

python ------ selenium find的使用 4.0新版本

selenium是一款十分强大的Web应用自动化框架,我们可以通过它来自动操控浏览器。操控浏览器的实质是操控浏览器的界面元素,因此定位元素是使用selenium的关键,selenium中通过find_element方法来完成定位。 1.find_element的三种用法 (1)通过webdriver对象的find_element("属性名","属性值") from selenium.web...

Mercury_cc的博客 243

Python自动化测试环境搭建:从虚拟环境到持续集成的完整指南

环境隔离是软件开发和测试中的基础概念,它通过创建独立的运行空间,确保不同项目间的依赖互不干扰。其核心原理是利用虚拟化技术,为每个项目提供专属的Python解释器和包目录。这一实践的技术价值在于保障了自动化测试脚本的可复现性和稳定性,是构建可靠CI/CD流水线的基石。在Python自动化测试领域,通过使用venv或virtualenv等工具实现环境隔离,并结合pytest、Playwright等现代测试库,能够高效搭建支持Web UI、接口等多种测试类型的专业环境。本文聚焦于Python自动化测试环境搭建,详

weixin_34326558的博客 355

Python Playwright监听微信读书API:高效获取结构化书单数据

网络数据采集是获取互联网信息的关键技术,其核心原理在于模拟客户端与服务器之间的通信以提取所需数据。传统方法如直接请求API常面临加密参数和反爬机制的挑战,而现代浏览器自动化技术提供了一种更稳定的解决方案。Playwright框架通过驱动真实浏览器并监听其网络请求,能够在不破解前端加密的情况下,直接捕获应用与服务器交互的原始数据,技术价值在于绕过了复杂的逆向工程,显著提升了数据采集的稳定性和开发效率。这一方法尤其适用于需要从动态渲染的现代Web应用中获取结构化数据的场景,例如从微信读书这类平台自动化收集图书列

过客阵营 -- 简单的就要最简单 1348

selenium常见方法

selenium基本操作 控制浏览器窗口大小 case.set_window_size(480, 800) #设置像素大小 case.maximize_window() #最大化 控制浏览器前进后退 case = webdriver.Chrome() case.get("https://www.baidu.com") case.back() #后退 case.forward() #前进 刷新页面 case.refresh() 4.常用方法

qq_43511940的博客 3924

pandas JSON与HTML数据导入实战:从报错到稳如磐石

JSON和HTML是Web时代最常见却最易出错的非结构化数据源,其本质是为传输与渲染设计,而非直接分析。理解JSON的嵌套树状结构与HTML中<table>标签的语义边界,是可靠导入的前提;pandas的json_normalize、read_html及read_pickle三大工具分别对应嵌套解析、网页表格抽取与类型保真序列化三大核心能力。掌握record_path元数据提取、selector精准定位、pickle安全加载等关键技术,可显著提升ETL鲁棒性,广泛应用于爬虫清洗、API集成、中台缓存等工程场

weixin_34295316的博客 423

selenium 4.0 我终于等到了你,不容易

本文环境:Python38、selenium4.1

软件测试技术交流分享 5105

RSS协议级播客元数据提取:Python高效解析实战

RSS是一种轻量、稳定、标准化的机器间内容分发协议,广泛用于播客等音频节目的元数据同步。其本质是符合XML规范的结构化文本流,支持直接HTTP获取与语义化解析,无需JavaScript渲染或反爬对抗。相比通用网页爬虫,RSS数据提取更强调协议合规性、XML语法健壮性与时间/编码等元数据的标准化处理。技术价值在于实现高并发、低资源占用、零失败率的批量元数据采集,支撑内容运营、话题分析与推荐系统等场景。本文聚焦于Python生态下基于requests与xml.etree.ElementTree的RSS协议直读方

weixin_30425949的博客 541

Python实战学习路径:从语法基础到爬虫与数据分析的完整闭环

Python作为一门通用编程语言,其核心价值在于将想法转化为可执行的自动化解决方案。其工作原理基于简洁的语法和丰富的库生态,能够高效处理各类任务。在技术价值层面,Python通过将语法基础、网络爬虫和数据分析三大技能结合,构建了从数据获取到价值提炼的完整工作流,极大地提升了个人和企业的生产力。这种组合尤其适用于需要从互联网采集信息并进行深度挖掘的应用场景,例如市场调研、舆情监控和业务决策支持。本文聚焦于Python语法基础、网络爬虫和数据分析的协同学习,通过环境搭建、核心代码示例和项目实战,拆解如何利用Py

weixin_34409357的博客 430

从Selenium到Playwright:自动化测试框架深度解析与实战指南

自动化测试是现代软件工程保障质量、提升交付效率的核心实践。其原理在于通过脚本模拟用户操作,对软件功能进行验证,从而替代重复的手工测试,实现快速反馈。在Web自动化领域,Selenium曾长期作为标准工具,但其在稳定性、执行速度以及对现代Web应用(如单页应用)的支持上逐渐面临挑战。随着技术演进,新一代框架通过更底层的浏览器协议、内置智能等待和丰富的设备模拟能力,为测试工程师提供了更强大的解决方案。这些技术能显著提升测试用例的健壮性和执行效率,广泛应用于Web应用、移动端Web的端到端测试、视觉回归测试及无障

weixin_34234721的博客 397

4399小游戏数据爬取实战:DrissionPage动态网页抓取与反爬策略

网络爬虫是自动化获取互联网公开数据的关键技术,其核心原理在于模拟浏览器行为或直接请求API接口来解析网页内容。在数据驱动决策的时代,高效、稳定地采集结构化数据对于市场分析、竞品研究、内容聚合等场景具有重要价值。面对现代网站普遍采用JavaScript动态渲染的现状,传统的静态解析库如BeautifulSoup已力不从心,需要结合浏览器自动化工具如Selenium或新兴的DrissionPage来应对。本文聚焦于一个典型应用场景——系统性地爬取4399小游戏平台的公开元数据(如游戏名称、分类、简介、热度等),

weixin_30855099的博客 377

微信小程序中的WXSS 样式

微信小程序中的WXSS 样式WXSS是一套样式语言,用于描述 WXML 的组件样式,所以说WXSS是用来控制WXML。简单来说,WXML表示页面有什么内容,而WXSS表示页面内容放置位置,尺寸大小,颜色等等。WXSS 具有 CSS 大部分的特性,也就是对页面的样式进行控制,当然, WXSS 也有一些区别于CSS的扩充和修改。小程序里的app.wxss 作为全局样式控制,用来控制小程序的全局样式,而...

ssyes123的博客 1669

Playwright Python API深度解析:从自动化测试到数据采集的实战指南

浏览器自动化是现代软件开发和数据工程中的关键技术,它通过程序控制浏览器行为,模拟真实用户操作。其核心原理是基于浏览器开发工具协议(如DevTools Protocol)与浏览器内核通信,实现对页面渲染、网络请求和用户交互的精准控制。这项技术的价值在于能够高效完成重复性Web操作,提升测试效率,实现大规模数据采集,以及自动化复杂业务流程。在Web自动化测试、数据爬虫、RPA(机器人流程自动化)和监控报警等场景中,浏览器自动化已成为不可或缺的基础设施。本文聚焦于Playwright这一新兴的现代化浏览器自动化库

weixin_30435261的博客 421

基于奥比中光Orbbec Astra Pro与ROS实现实时3D环境建模:orb_slam2实战指南

本文提供了一份详细的实战指南,介绍如何使用奥比中光Orbbec Astra Pro深度摄像头与ROS系统,部署并运行ORB-SLAM2算法,实现实时3D环境建模与定位。内容涵盖从驱动安装、环境配置、算法编译到摄像头标定与性能调优的全流程,旨在帮助开发者快速搭建一套高性价比的视觉SLAM系统。

weixin_29054399的博客 337

Python实战学习路径:从零基础到爬虫与数据分析项目

编程语言的核心价值在于解决实际问题,Python以其简洁语法和丰富生态,成为自动化、数据处理和快速原型开发的首选。其工作原理基于解释执行,通过清晰的代码结构实现复杂逻辑,技术价值体现在提升效率、降低开发门槛上。在应用场景中,Python广泛应用于网络爬虫、数据分析、Web开发等领域。本文聚焦于Python学习路径,通过结构化方案,涵盖零基础入门、爬虫实战和数据分析三大模块,帮助学习者掌握核心技能。文章强调动手实践,提供从环境搭建到项目实战的完整代码示例,并融入常见问题排查与工程化建议,确保学习效果可落地。

weixin_30530939的博客 369

EMC辐射发射测试:垂直与水平极化测试原理与实战指南

电磁兼容(EMC)测试是确保电子设备在复杂电磁环境中稳定运行的关键环节,其核心在于评估设备产生的电磁干扰(EMI)强度。辐射发射测试作为EMC测试的重要组成部分,通过测量设备向空间辐射的电磁噪声,判断其是否符合国际标准限值。测试原理基于电磁波的极化特性,即电场矢量的振动方向,主要分为垂直极化和水平极化。理解极化特性对于精准定位辐射源、高效进行EMC整改具有重要技术价值。在工程实践中,垂直极化噪声通常源于线缆辐射等垂直结构,而水平极化噪声多来自PCB走线等水平结构。通过分别测量两种极化方向的辐射最大值,可以全

weixin_32770423的博客 362

开发者视频剪辑自动化:用FFmpeg+Python脚本实现一键生成技术教程

视频处理是现代技术内容创作的重要环节,其核心原理涉及多媒体编码、流处理和自动化脚本技术。通过命令行工具FFmpeg和Python库MoviePy,开发者可以将传统繁琐的剪辑工作转化为可编程、可重复的自动化流程,显著提升技术分享、项目演示和教程制作的效率。这种自动化方案尤其适用于录屏演示、技术教程生成和项目汇报等场景,能够将视频剪辑无缝集成到开发工作流中。本文聚焦于FFmpeg和Python脚本的实战应用,帮助开发者构建高效的视频处理流水线,实现从手动剪辑到一键生成的转变。

weixin_34032792的博客 412

【思考模型框架】前景理论(Prospect Theory),认为人们并不是完全理性的决策者,而是根据一些心理上的偏差来评估选项的价值

前景理论,是一种行为经济学理论。前景理论,描述了人们在不确定条件下如何作出决策。前景理论,认为人们并不是完全理性的决策者,而是根据一些心理上的偏差来评估选项的价值。

奶爸的编程之路,也就一周冷个三天 1644

什么是 SAP Fiori 的 Technical Catalog

笔者之前的文章曾经提到一个叫做本文介绍 Technical Catalog 这个概念在 SAP Fiori 技术体系中的作用。首先我们如何在系统里查看这个 Catalog SAP_BASIS_TCR_T 里面包含的内容呢?如果大家照着本文开头那篇文章里提到的步骤,那么在自己系统里会创建好名叫的 PFCG role.我们登录 ABAP 系统,启动事务码 PFCG,打开这个 role, 就能看到它。展开之后,发现它扮演着一个容器的角色,里面包含了很多 ABAP 对象。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 744

用Python自动化SEM关键词生成与广告投放

关键词是搜索引擎营销(SEM)的核心资产,其本质是用户搜索意图与业务供给之间的语义映射。传统手动构建方式面临规模失配、逻辑断裂与迭代僵化三大瓶颈,而数据科学介入的关键价值在于提升确定性——通过结构化数据源、受控组合策略、工程化广告模板与可审计决策留痕,实现关键词矩阵的系统性生成与精准投放。本文聚焦教育科技场景,以Python为工具链,详解如何将课程体系、技术栈、讲师资源等业务实体,转化为符合Google Ads匹配规则、字符约束与转化目标的关键词与广告文案,覆盖从网页抓取、意图分层、+号修饰Broad Ma

weixin_34101229的博客 448

《UDS协议从入门到精通》系列——图解0x23:通过地址读取内存

如何读取ECU中指定内存地址的数据?图解UDS 0x23服务带你快速上手!!

车载系统攻城狮 2625
上一篇: 死神VS火影 | 2D目标检测
YawQinse
博客等级 码龄7年 22粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值