2025 年使用 SeleniumBase 和 Python 进行网页抓取

SeleniumBase框架破解复杂日期选择器自动化测试难题 在UI自动化测试领域,处理动态、多层、状态复杂的组件一直是技术难点,尤其是日期选择器这类交互复杂的控件。其核心原理在于如何精准定位、稳定操作和有效验证动态元素。通过引入智能等待机制和增强型定位策略,可以显著提升测试脚本的稳定性和可维护性。SeleniumBase框架正是基于这一技术价值,为自动化测试工程师提供了高效解决方案。在实际应用场景中,无论是电商平台的预订系统还是旅行应用的日期范围选择,SeleniumBase都能通过其自动等待、强大定位和页面对象模型等特性,将复杂日期选择器的自动化挑战转化为清晰、可 阅读详情

在本文中,我将带你了解 SeleniumBase 的核心功能,展示如何用它进行抓取,并分享一些应对当今网络挑战的实用技巧。无论你是刚接触抓取,还是希望进一步提升技能,SeleniumBase 都提供了一种简单直接的入门方式。

什么是 SeleniumBase?

SeleniumBase 是一个基于 Selenium 构建的开源 Python 框架,旨在简化网页自动化任务,包括测试和抓取。与通常需要大量样板代码的标准 Selenium 不同,SeleniumBase 通过内置的数据提取、交互自动化和反机器人规避工具,减少重复编码。

替代方案——自动化网页抓取工具

如果你需要大规模抓取,或抓取使用了高级反抓取技术的复杂网站,我建议可以尝试以下我所在机构正在使用的网页抓取工具:

  1. Bright Data — 高级抓取的综合最佳选择;具备广泛的代理管理功能和可靠的 API。
  2. Octoparse — 易于使用的无代码工具,可从网站自动提取数据。
  3. ScrapingBee — 面向开发者的 API,可高效处理代理、浏览器和 CAPTCHA。
  4. Scrapy — 开源 Python 框架,非常适合数据爬取和抓取任务。
  5. ScraperAPI — 通过高级反机器人技术处理棘手的抓取任务;非常适合开发者。
  6. Apify — 多功能平台,提供现成爬虫工具和强大的抓取能力。

如果想进一步了解每项服务,我推荐阅读我关于网页抓取工具的完整文章。

现在,我们从安装 SeleniumBase 开始。

设置 SeleniumBase

在开始网页抓取之前,你需要在系统上设置 SeleniumBase。步骤如下:

安装 Python:确保你已经安装了 Python。如果还没有,请从官方 Python 网站下载。

安装 SeleniumBase:使用以下命令通过 pip 安装 SeleniumBase:

pip3 install seleniumbase

安装 WebDriver:SeleniumBase 会管理 WebDriver 的安装,但如果你愿意,也可以手动下载并将其放入 PATH 中。

验证安装:为确保 SeleniumBase 已正确设置,运行以下命令查看可用选项:

seleniumbase - help

现在你已经安装了 SeleniumBase,我们来创建一个基础爬虫工具。

使用 SeleniumBase 构建基础爬虫工具

使用 SeleniumBase 创建一个简单的网页爬虫,需要设置一个 Python 脚本来与网页交互。在这个示例中,我们将从一个电商演示站点抓取产品详情。

以下是构建基础爬虫的分步指南:

在你的项目目录中创建一个名为 爬虫工具.py 的新文件。

编写以下代码以提取目标页面的完整 HTML 内容:

from seleniumbase import BaseCase

class 抓取工具(BaseCase):

def test_get_html(self):

self.open("https://www.scrapingcourse.com/ecommerce/")

page_html = self.get_page_source()

print(page_html)

运行爬虫工具,使用 pytest 命令:

pytest 爬虫.py -s

上述代码会打开电商页面并提取 HTML,然后将其打印到终端。这是更复杂抓取任务的基础。

提取特定数据

为了让爬虫工具更有用,你通常需要定位特定元素,例如产品名称、图片和 URL。SeleniumBase 支持 CSS 选择器、XPath 和 ID 来定位元素。下面展示如何提取不同类型的信息:

抓取产品名称

识别产品名称的 HTML 结构,在本示例中,它位于带有 product-name 类的 h2 标签内。下面的代码演示如何抓取产品名称:

from seleniumbase import BaseCase

class 抓取工具(BaseCase):

def test_get_product_names(self):

self.open("https://www.scrapingcourse.com/ecommerce/")

product_names = self.find_elements("h2.product-name")

names = [product.text for product in product_names]

print(names)

抓取产品图片

要抓取图片 URL,请定位带有 product-image 类的 img 标签。以下代码会提取图片 URL:

from seleniumbase import BaseCase

class 爬虫工具(BaseCase):

def test_get_image_urls(self):

self.open("https://www.scrapingcourse.com/ecommerce/")

image_elements = self.find_elements("img.product-image")

image_urls = [image.get_attribute("src") for image in image_elements]

print(image_urls)

抓取产品链接

类似地,从带有 woocommerce-LoopProduct-link 类的 a 标签中提取产品 URL:

from seleniumbase import BaseCase

class 抓取工具(BaseCase):

def test_get_product_links(self):

self.open("https://www.scrapingcourse.com/ecommerce/")

link_elements = self.find_elements("a.woocommerce-LoopProduct-link")

links = [link.get_attribute("href") for link in link_elements]

print(links)

自动化浏览器交互

在某些情况下,抓取静态内容并不够,尤其是对于动态加载内容或需要用户交互的网站。SeleniumBase 支持一系列浏览器操作,包括点击、滚动和表单提交。

示例:自动化表单提交

假设某个站点需要登录凭据。下面是一个用于登录并抓取内容的脚本:

from seleniumbase import BaseCase

class 爬虫(BaseCase):

def test_login_and_scrape(self):

self.open("https://www.scrapingcourse.com/login")

self.type("#email", "admin@example.com")

self.type("#password", "password")

self.click("button[type='submit']")

self.save_screenshot("after_login.png")

该脚本会填写登录信息、提交表单,并在登录后截取屏幕截图。save_screenshot 函数有助于确认爬虫工具是否正确浏览站点。

规避反机器人措施

网站经常使用各种反机器人措施,例如 CAPTCHA、IP 封禁或 JavaScript 挑战。SeleniumBase 包含一些有助于绕过此类措施的功能,但也存在限制。

使用 UC 模式

SeleniumBase 的 UC(Undetected ChromeDriver)模式允许爬虫通过修改浏览器指纹来模拟真实用户行为。启用方法如下:

from seleniumbase import Driver

class 抓取工具(BaseCase):

def test_bypass_bot_protection(self):

driver = Driver(uc=True)

driver.open("https://www.scrapingcourse.com/antibot-challenge")

driver.uc_gui_click_captcha()

page_html = driver.get_page_source()

print(page_html)

driver.quit()

该脚本使用 UC 模式绕过机器人检测并处理 CAPTCHA 挑战。请注意,虽然 UC 模式有助于规避检测,但它并非万无一失,尤其是在面对高度复杂的反机器人系统时。

代理配置

使用代理可以通过轮换 IP 地址来防止 IP 被封禁。SeleniumBase 允许你配置代理以增强匿名性:

pytest 爬虫工具.py - proxy=IP:PORT - proxy-type=http

此命令会设置一个代理服务器,SeleniumBase 会在抓取会话中的所有请求中使用它。

高级技巧和最佳实践

为了让你的网页爬虫更稳健且更不容易被封锁,请遵循以下最佳实践:

  1. 使用随机延迟:在操作之间加入随机休眠间隔,以模拟人类浏览模式。
  2. 轮换 User Agent:更改 user-agent 字符串,以模拟不同设备和浏览器。
  3. 处理 JavaScript 渲染:使用 self.wait_for_element 确保所有动态内容在抓取前加载完成。
  4. 尊重 Robots.txt 文件:始终检查网站的 robots.txt 文件,了解哪些部分允许抓取。

SeleniumBase 的局限性

尽管 SeleniumBase 功能强大,但它也有一些缺点:

  • 无头模式下的检测:有些网站可以检测到无头浏览器。
  • 规模限制:由于速度限制,它不适合跨大量页面抓取大规模数据。
  • 反机器人适应:作为开源工具,反机器人开发者可以更新算法来检测 SeleniumBase。

结论

使用 SeleniumBase 进行网页抓取是一种灵活而强大的数据收集、任务自动化以及与网站交互的方式。我觉得它特别有吸引力,因为它易于使用,并提供了强大的自动化功能,非常适合初学者和经验丰富的开发者。尽管存在一些挑战,例如反机器人检测和扩展方面的限制,但使用 UC 模式和代理设置等智能策略,可以大幅提高成功率。

如果你认真想做网页抓取,学习 SeleniumBase 是必不可少的。随着自动化工具持续发展,能够适应并使用这些框架,是在不断变化的网页抓取世界中保持领先的关键。

感谢阅读,如有任何问题请告诉我!

对其他网页抓取指南感兴趣?

  • 使用 Scrapy 进行网页抓取
  • 使用 Selenium 进行网页抓取
  • 用于网页抓取的 JavaScript 与 Python 对比
  • 使用 Python lxml 进行网页抓取
  • 使用 Excel 进行网页抓取
  • 使用 Python 进行网页抓取
  • 使用 C# 进行网页抓取

想阅读其他精彩文章,请访问我的个人主页 — Data Journal ❤️

Pandas入门教程(二十二):股票数据分析实战——yfinance 获取数据、技术指标与收益率分析 把 Pandas 用在真实场景,才能体会它的价值。本文以茅台股票为例,用 yfinance 获取历史行情,完成缺失值处理与列筛选,绘制收盘价曲线,计算 SMA 移动平均线与 RSI 相对强弱指数,并通过日收益率、累计收益率和波动率完成完整的量化分析流程。 阅读详情

相关推荐

48V电气架构全面科普和解析:下一代智能电动汽车核心驱动

随着电动汽车(EV)技术的不断发展,传统的12V电力系统已经逐渐无法满足日益增长的功率需求,尤其是在电动汽车中,48V电气系统的引入成为了一种理想的解决方案。在电动汽车中,48V系统与Zonal架构的结合,不仅有效提升了车辆电力系统的能效,还为未来的技术升级提供了灵活的设计基础。随着电动汽车(EV)技术的发展,车辆电气系统的工作电压逐步从传统的12V系统向更高的电压过渡。随着电动汽车技术的不断进步,传统的12V电气系统逐渐无法满足现代高性能电动汽车的需求,而48V电力系统的引入成为一种理想的解决方案。

weixin_43199439的博客 7810

Web自动化选型:8款替代Selenium的省心工具(2025)

浏览器自动化是Web测试、爬虫开发与RPA实施的共同底座。传统方案通常通过WebDriver驱动真实浏览器,却深受驱动版本不匹配、页面异步加载和选择器频繁失效的困扰,导致脚本“跑得通但养不起”。新一代自动化引擎选择与Chrome DevTools Protocol直接通信,将自动等待、会话恢复等机制沉淀为内建能力,显著降低环境配置与调试成本。在数据采集、回归测试、业务系统操作等典型场景中,Playwright、Puppeteer、DrissionPage等工具能以更少的代码实现更稳定的执行,成为Seleni

490

超详细!思岚S2激光雷达hector_mapping建图

使用思岚S2激光雷达,在ros平台上利用hector_mapping功能包实现建图功能

m0_50965539的博客 5591

SeleniumBaseAI内容生成Web测试:创作工具自动化验证

你是否还在为AI内容生成工具的输出质量担忧?当创作平台生成一篇包含文本、表格、流程图的复杂文档时,如何确保所有元素都能在不同浏览器中正确渲染?SeleniumBase提供了一套完整的自动化测试方案,让AI内容工具的验证效率提升10倍。本文将通过实战案例,展示如何用Python实现从内容生成到视觉渲染的全流程验证,包括动态内容捕捉、多维度断言验证等核心技术。 读完本文你将获得: - 5种AI生成内...

gitblog_01083的博客 960

MATLAB 2026最新版免费下载安装教程:许可证激活与报错排查

科学计算与仿真在工程实践中扮演着核心角色,MATLAB 作为业界标准平台,凭借矩阵运算、数据可视化和 Simulink 仿真能力,成为高校课程设计与科研实验中的高频工具。理解其许可证机制是正确安装与持续使用的关键:官方提供试用版、学生版、家庭版及校园许可证等多种合法获取途径,安装包由引导器、工具箱文件与授权信息组成。掌握从下载到激活的完整流程,并根据操作系统进行环境配置与工具组件选装,不仅能规避安全风险,还能显著提升工程效率。针对安装过程中常见的许可证校验失败或工具箱不可用等问题,提供系统化排查思路与命令行

weixin_30702441的博客 2520

超声波 vs 红外 vs 激光雷达:扫地机器人避障传感器选型指南(实测对比)

本文深入对比了扫地机器人三种主流避障传感器——超声波、红外与激光雷达的核心原理与实测表现。文章基于成本、精度、环境适应性等关键指标,提供了清晰的选型决策树和典型场景配置方案,旨在帮助开发者与爱好者根据项目需求与预算,构建高效可靠的机器人避障系统。

h0i1j2k3l的博客 690

爬虫教程( 4 ) --- scrapy-redis、集群、curl-cffi、scrapy-stealth、aio-scrapy、omnicrawl-core、反检测(反爬)浏览器

分布式爬虫 scrapy-redis、集群

freeking101的博客 6822

UE4游戏开发:GameInstance与GameMode的实战应用与避坑指南

本文深入解析了UE4中GameInstance与GameMode的核心差异与实战应用。GameInstance作为贯穿游戏进程的全局单例,负责跨关卡数据持久化与系统管理;而GameMode则定义特定关卡内的游戏规则与逻辑,随关卡加载销毁。文章通过数据存储、动态模式切换及网络游戏等场景,提供了清晰的应用指南与常见避坑方案,帮助开发者构建更健壮的UE4游戏架构。

kubernetes8ctl的博客 230

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 400

数据预处理之数据平滑处理#matlab

介绍基于 MATLAB 的数据平滑方法,主要介绍 smooth 函数、smoothts 函数和 medfilt1 函数的用法。

m0_56619132的博客 2414

Calibre:LVS 快速debug short/open技巧

用Fix Suggestion和Short Isolate两种方法debug LVS问题

m0_61544122的博客 7455

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 232

HTOL集成电路老化测试学习总结-20250510

电子元器件的可靠性在产品开发中至关重要,尤其是在微电子技术迅速发展的今天。电子元器件的失效率通常遵循“浴盆曲线”,分为早期失效期、可使用期和老化期。为了评估芯片的可靠性,常采用高温操作寿命测试(HTOL),通过高温和高压加速芯片老化,以筛选出早期失效的芯片并评估其长期可靠性。HTOL测试中,芯片在高温下运行并监控其性能变化,通过阿伦尼乌斯公式计算加速因子,预测芯片的失效率和寿命。此外,Burn-in测试用于加速芯片老化,提前发现并剔除不合格产品,而早期失效率测试(ELFR)则用于评估产品初期使用阶段的可靠性

歌颂苦难的行为是无耻的; 2102

Python+Agent入门笔记(二):列表推导式、模块和异常,这些写 Agent 前得会

接上一篇《Python+Agent入门笔记(一)》。基础语法跑通之后,这篇聊几块日常写脚本绕不开的东西。还是按 JS/Go 开发者的视角写,尽量记录我实际卡过的地方。

qq_41241612的博客 430

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【每天一个 Python 小案例30】Python 基础知识综合小项目:我的工具盒

作为系列收官,本篇把前 29 篇的知识点合成一个能直接用的命令行工具"我的工具盒":计算器(用 ast 解析表达式,不碰 eval)、单位换算与温度转换(一张换算表 + 特例分支)、记账与分类统计(Decimal + JSON 持久化)、以及用"字典当命令表"把菜单和业务逻辑解耦的主循环。文中对比了 eval 的安全隐患与 ast 白名单的做法,解释了 lambda 闭包在字典里的写法与晚绑定陷阱,并在最后给出整个系列的知识地图,把变量、数据结构、控制流、函数、类、异常、文件、标准库八块内容对应到具体篇目。

xinjiyaya的博客 422

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

详解Python条件语句

在 Python 中,if...else 是一种条件语句,可以根据给定的条件执行不同的操作。这个语句通常用于控制程序的流程。

2601_96798737的博客 205

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Python3 协程:异步编程的核心机制与实战

协程是解决I/O密集型任务等待瓶颈的高效机制,相比线程更轻量、无锁开销。从yield到async/await的演进,使异步编程语义清晰、易于理解。通过async/await可实现并发执行多个任务(如gather、create_task),显著提升网络请求、爬虫等场景性能。关键在于使用异步库(如aiohttp)替代同步库,避免阻塞事件循环。合理控制超时与并发数,才能发挥协程最大优势。

Lxn2zh的博客 159

python如何控制浏览器

Python 可以通过 Selenium、Playwright 等工具实现浏览器自动化,从打开网页到执行复杂交互操作均可脚本化完成。Selenium生态成熟

2601_96797912的博客 76

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 267

torch.compile 差异仅 1e-6,边界样本预测为何翻转

torch.compile 加速后输出与 eager 不一致,部分预测翻转。逐层对比与 graph break 分析定位到动态分支翻转根因。容差回归仅适用于无分支翻转场景,零容忍场景应禁用编译。

昨日种种,皆成今我。今日种种,皆成新我。 159

Python 100讲课程导航:第08篇《Python input 与类型转换:构建可靠的交互程序》

本文详解Python中input()的返回类型为字符串,强调必须通过int()、float()等函数进行类型转换。重点讲解了输入验证的重要性,结合try-except处理ValueError等异常,实现可靠的交互程序。通过购物预算计算器实战,演示如何防范非法输入、处理边界值,并推荐使用Decimal避免浮点精度问题,提升程序健壮性。

铭渊老黄 134

【Python】国家中小学智慧教育平台电子教材批量下载与 PDF 合成实战

成果:两本语文电子课本(一年级上册 118 页 / 23MB、三年级上册 130 页 / 30.3MB),合计 248 页、约 54MB,单本下载加合成 40~60 秒,PDF 页数校验全部通过。经验教训SPA 站点的数据接口优先从 bundle 里挖,比抓页面稳得多;资源链接要按 private/public 分组看待,只取平台公开部分;页数、目录名这类“可推断”的信息,永远用实际响应验证一次;受限环境里“能不能跑浏览器”要在方案定稿前确认。后续计划:这版 PDF 是图片版,没有文字层;

木头大左的博客 128

魔塔社区微调训练Qwen2-1.5B-Instruct模型并烧录到‌RK3568开发板教程

本文基于Ubuntu 22.04 + CUDA 13.0.3环境,使用LLaMA-Factory框架对Qwen2-1.5B-Instruct模型进行LoRA微调,训练儿童故事生成专用模型。通过配置qwen模板、制作alpaca格式数据集、执行sft训练并合并LoRA权重,最终将模型转换为GGUF格式,并量化为Q4_K_M以适配RK3568嵌入式平台。全程支持国产镜像加速下载与显存优化,实现高效轻量化部署。

浅清秋慕夏的博客 185

【回眸】DeepSeek V4.1 Flash 快速上手与实战

本文介绍如何高效本地部署开源大模型,通过现代化工具链实现分钟级环境搭建。聚焦显存优化、一键安装、代码调用与多轮对话实现,解决“显存不足”“连接超时”等痛点,提供参数调优与结构化输出技巧,助力开发者在离线场景下快速构建稳定、高效的本地推理系统。

啤酒鸭的物联网开发记录博客 222

智叟云集-手机证据抓取系统的工程结构与应用入口

本文系统阐述手机证据抓取系统的工程结构与应用入口,涵盖四大层面:工程目录划分(Android、Python服务、Web页面、测试与构建工具);Android组件通过Manifest声明可启动页面,主界面由MainActivity管理;Python服务通过run.py解析参数并启动FastAPI应用,支持远程访问;浏览器页面采用HTML/CSS/JS分离架构,静态资源通过路径关联,实现动态交互。各模块分工明确,协同构建可运行的采集系统。

2301_77178996的博客 231
上一篇: 如何使用 Google Sheets 抓取网站数据
下一篇: 2026 年 6 个最佳 Axios 替代方案
Data_Journal
博客等级 码龄1年 158粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值