Selenium的底层原理

Selenium 底层主要依赖于 WebDriver 协议(即 W3C WebDriver 规范,早期也有 JSON Wire Protocol)来实现对浏览器的远程控制,其核心架构可以分为以下几层:

  1. Selenium 客户端(Client Library)

    • 支持多种语言(Java、Python、C#、JavaScript 等)。

    • 提供了一套统一的 API,让测试脚本(如 driver.find_element(...)driver.click())可以以语言原生的方式调用。

    • 客户端发送的每一个操作都会被封装成一个 HTTP 请求(JSON 格式),通过 HTTP Connector 发往对应的浏览器驱动。

  2. WebDriver 协议(W3C WebDriver / JSON Wire Protocol)

    • 定义了“客户端 → 驱动”之间所有命令的格式和路由,包括元素定位、页面导航、脚本执行等。

    • 每个命令都是一个 HTTP 请求,路径类似 /session/{sessionId}/element/{elementId}/click,请求体里是 JSON 参数。

    • 驱动收到 HTTP 请求后,解析出命令类型和参数,然后执行相应的操作。

  3. 浏览器驱动(Browser Driver)

    • 每种浏览器都有专属的驱动程序:ChromeDriver、GeckoDriver(Firefox)、EdgeDriver、IEDriver 等。

    • 驱动本质上是一个 HTTP 服务进程,监听来自客户端的 WebDriver 协议请求。

    • 驱动内部与浏览器进行通信 — 有的通过浏览器提供的 DevTools 协议(如 Chrome DevTools Protocol,CDP),有的通过浏览器自身的自动化接口(如 Firefox 的 Marionette)。

  4. 浏览器自动化接口

    • Chrome:ChromeDriver 调用底层的 CDP,实现页面元素查找、事件触发、网络拦截等。

    • Firefox:GeckoDriver 则通过 Marionette 协议,向浏览器内置的自动化模块发送命令。

    • 其他浏览器:各自提供类似接口,或通过插件/扩展形式加载自动化脚本。

  5. 执行流程示例

    1. 客户端脚本调用 driver.get("https://example.com")

    2. 客户端库将该调用转换成一个 HTTP POST 请求:

      POST /session/{sessionId}/url
      { "url": "https://example.com" }
      
    3. 浏览器驱动(如 ChromeDriver)接收请求,解析后通过 CDP 命令告诉 Chrome 打开页面。

    4. Chrome 完成导航后,驱动返回一个 HTTP 响应给客户端,客户端继续后续操作。

  6. 并行/分布式执行(Selenium Grid)

    • Selenium Grid 把上述架构扩展为分布式系统:一个 Hub 接收测试请求,分发给不同 Node(各自运行一个或多个浏览器驱动实例)。

    • Hub 与 Node 之间依然通过 WebDriver 协议通信,只是多了注册、心跳、能力匹配等管理逻辑。

  7. Selenium RC(历史)

    • Selenium 1.0(RC)阶段,使用了一个名为 “Selenium Core” 的 JavaScript 库注入到浏览器页面里,通过 DOM 操作和 JS 事件模拟实现自动化,受限于同源策略,需要启动一个跨域代理服务器。

    • 后来被 WebDriver 模型取代,因为 WebDriver 不注入脚本,只通过浏览器自身的自动化接口,可靠性和性能更好。


总结: Selenium 底层核心依赖

  • 客户端库 → 封装 API & 生成 HTTP/JSON 请求

  • WebDriver 协议 → 标准化命令格式(W3C WebDriver / JSON Wire Protocol)

  • 浏览器驱动 → HTTP 服务 → 转发到浏览器自动化接口(CDP、Marionette 等)

  • 浏览器自动化接口 → 浏览器内部执行对应操作,并回传结果

通过这一“堆栈式”架构,Selenium 才能以语言无关、浏览器无关的方式,提供统一且高效的 Web 自动化能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/82861.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…

MATLAB-电偶极子所产出的电磁场仿真

% 清除工作区 clear all % 用户输入 a input(输入点电荷的位置如[1,0,1;2,0,2]表示位置在(1,0,1),(2,0,2): ); Q input(输入点电荷的电荷量,-表示电性,如[1,-1]: ); a1 input(电场线角度间隔: ); % 角度间隔 % 设置绘图范围 xmin min(a(:,1)) - 4;…

混合云数据库连接问题:本地与云实例的兼容性挑战

关键词:混合云数据库,混合云架构,数据库连接问题,网络策略,兼容性挑战,权限冲突,防火墙,VPN,ExpressRoute,Direct Connect,SQL Server,MySQL,PostgreSQL,Azure SQL Database,AWS RDS 随着企业数字化转型的深入,混合云架构正成为主流选择。它结合了本地数据中心…

pikachu靶场通关笔记16 CSRF关卡02-CSRF(POST)

目录 一、CSRF原理 二、源码分析 三、渗透实战 1、构造CSRF链接 (1)登录 (2)bp设置inception on (3)修改个人信息 (4)构造CSRF链接 2、模拟受害者登录 3、诱导受害者点击 …

CAD2025安装教程与资源下载

软件下载 软件名称:CAD2025软件语言:简体中文软件大小:2.69G系统要求:Windows10或更高,32/ 64位操作系统硬件要求:CPU2GHz ,RAM4G或更高下载链接: 链接:https://pan.qua…

SpringBoot离线应用的5种实现方式

在当今高度依赖网络的环境中,离线应用的价值日益凸显。无论是在网络不稳定的区域运行的现场系统,还是需要在断网环境下使用的企业内部应用,具备离线工作能力已成为许多应用的必备特性。 本文将介绍基于SpringBoot实现离线应用的5种不同方式。…

数据类型 -- 字符

在C中,字符型(char)用于存储单个字符,如字母、数字、符号等。字符型是最基本的数据类型之一,常用于处理文本、字符数组(字符串)等场景。 1. 基本类型 • char:标准字符类型&#x…

国标GB28181视频平台EasyGBS视频实时监控系统打造换热站全景可视化管理方案

一、方案背景​ 在城市供热体系中,换热站作为连接热源与用户的核心枢纽,其运行稳定性直接影响供热质量。面对供热规模扩大与需求升级,传统人工巡检模式暴露出效率低、响应慢、监测不足等问题。基于GB28181协议的EasyGBS视频实时监控系统&…

174页PPT家居制造业集团战略规划和运营管控规划方案

甲方集团需要制定一个清晰的集团价值定位,从“指引多元”、“塑造 能力”以及“强化协同”等方面引领甲方做大做强 集团需要通过管控模式、组织架构及职能、授权界面、关键流程、战略 实施和组织演进路径,平衡风险控制和迅速发展,保证战略落地…

python打卡第45天

tensorboard的发展历史和原理 一、发展历史 起源与 TensorFlow 一同诞生 (2015年底): TensorBoard 最初是作为 TensorFlow 开源项目(2015年11月发布)的一部分而设计和开发的。其核心目标是解决深度学习模型训练过程中的“黑盒”问题,提供直观…

CentOS 7如何编译安装升级gcc至7.5版本?

CentOS 7如何编译安装升级gcc版本? 由于配置CentOS-SCLo-scl.repo与CentOS-SCLo-scl-rh.repo后执行yum install -y devtoolset-7安装总是异常,遂决定编译安装gcc7.5 # 备份之前的yum .repo文件至 /tmp/repo_bak 目录 mkdir -p /tmp/repo_bak && cd /etc…

中山大学美团港科大提出首个音频驱动多人对话视频生成MultiTalk,输入一个音频和提示,即可生成对应唇部、音频交互视频。

由中山大学、美团、香港科技大学联合提出的MultiTalk是一个用于音频驱动的多人对话视频生成的新框架。给定一个多流音频输入和一个提示,MultiTalk 会生成一个包含提示所对应的交互的视频,其唇部动作与音频保持一致。 相关链接 论文:https://a…

iOS 门店营收表格功能的实现

iOS 门店营收表格功能实现方案 核心功能需求 数据展示:表格形式展示门店/日期维度的营收数据排序功能:支持按营收金额、增长率等排序筛选功能:按日期范围/门店/区域筛选交互操作:点击查看详情、数据刷新数据可视化:关…

怎么解决cesium加载模型太黑,程序崩溃,不显示,位置不对模型太大,Cesium加载gltf/glb模型后变暗

有时候咱们cesium加载模型时候型太黑,程序崩溃,不显示,位置不对模型太大怎么办 需要处理 可以联系Q:424081801 谢谢 需要处理 可以联系Q:424081801 谢谢

移植driver_monitoring_system里的MobileNet到RK3588

根据下面的内容写一篇技术博客,要求增加更多的解释,让普通读者也能了解为什么这样做,具体怎么做 移植driver_monitoring_system里的MobileNet到RK3588 一、背景二、操作步骤2.1 下载源码2.2 Tensorflow转成ONNX2.2.1 在x86上创建容器,安装依赖2.2.2 保存为saved-model2.2.3 sav…

低代码平台前端页面表格字段绑定与后端数据传输交互主要有哪些方式?华为云Astro在这方面有哪些方式?

目录 🔧 一、低代码平台中常见的数据绑定与交互方式 1. 接口绑定(API 调用) 2. 数据源绑定(DataSource) 3. 变量中转(临时变量 / 页面状态) 4. 数据模型绑定(模型驱动) 🌐 二、华为云 Astro 轻应用的实现方式 ✅ 1. 数据源绑定(API服务+API网关) ✅ 2. 变…

《doubao-lite-32k 模型缓存机制使用指南》

doubao-lite-32k 模型缓存机制使用指南 一、缓存概述 1. 缓存作用 doubao-lite-32k 模型的缓存(Session 缓存)主要用于多轮对话场景,实现以下功能: 存储历史对话信息(Token),避免重复传输上下文,减少计算资源消耗。 优化长上下文(最长 32K Token)处理效率,提升多…

量子计算突破:新型超导芯片重构计算范式

​​2024年IBM 1281量子比特超导芯片实现0.001%量子错误率,计算速度达经典超算2.5亿倍​​。本文解析: ​​物理突破​​:钽基超导材料使量子相干时间突破​​800μs​​(提升15倍)​​架构革命​​:十字形…

云计算 Linux Rocky day03(which、快捷键、mount、家目录、ls、alias、mkdir、rm、mv、cp、grep)

云计算 Linux Rocky day03(which、快捷键、mount、家目录、ls、alias、mkdir、rm、mv、cp、grep) 目录 云计算 Linux Rocky day03(which、快捷键、mount、家目录、ls、alias、mkdir、rm、mv、cp、grep)1.which找到命令所对应的程序…

负载均衡LB》》HAproxy

Ubuntu 22.04 安装HA-proxy 官网 资料 # 更新系统包列表: sudo apt update # 安装 HAproxy sudo apt install haproxy -y # 验证安装 haproxy -v # 如下图配置 Haproxy ##### 基于IP的访问控制 acl ctrl_ip src 172.25.254.1 172.25.254.20 192.168.0.0/24 #…