跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Python 爬虫与 Selenium 动态页面抓取及学习路径指南

综述由AI生成重点解决 Selenium 在执行 JavaScript 脚本模拟点击时遇到的元素定位失效问题,提供了正确的元素查找与脚本传递方法。同时梳理了从 Python 基础语法到爬虫框架、数据分析及机器学习的系统学习路线,涵盖核心库如 Requests、Scrapy、Pandas 等,旨在帮助开发者构建完整的数据采集与分析能力体系。

Eee_123发布于 2025/2/6更新于 2026/6/218 浏览
Python 爬虫与 Selenium 动态页面抓取及学习路径指南

Python 爬虫与 Selenium 动态页面抓取实战

前言

Python 爬虫在数据采集领域非常强大。在处理现代网页时,许多内容是通过 JavaScript 动态加载的,传统的 HTTP 请求无法直接获取这些数据。此时,Selenium 作为自动化测试工具,常被用于模拟浏览器行为,自动操控 DOM 元素和执行 JavaScript 脚本。

本文将深入探讨如何使用 Selenium 执行 JavaScript 程序,解决动态网页中的点击、交互问题,并梳理从入门到进阶的系统学习路径。

核心问题:Selenium 执行 JavaScript 点击失效

在使用 Selenium 抓取数据时,经常遇到需要模拟鼠标点击触发 JS 事件的情况。如果直接使用 execute_script 尝试查找元素并点击,往往会因为作用域或语法错误导致失败。

常见错误示例

以下代码试图直接在 JavaScript 字符串中调用 Python 的 By 类,这是无效的:

# 错误示范
browser.execute_script("document.getElement(By.xpath(\"//div[@class='vbseo_liked']\")").click()")

原因分析:

  1. By 是 Python Selenium 库中的类,JavaScript 环境中不存在。
  2. execute_script 运行在浏览器上下文中,无法直接访问 Python 对象。
  3. 元素定位应在 Python 端完成,再将元素引用传递给 JavaScript。

正确解决方案

正确的流程是:先在 Python 中找到元素对象,然后将其作为参数传递给 execute_script。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化浏览器 (推荐使用 Chrome)
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://example.com")

try:
    # 1. 在 Python 端定位元素
    link = driver.find_element(By.XPATH, "//div[@class='vbseo_liked']/a[contains(@onclick, 'return vbseoui.others_click(this)')]")
    
    # 2. 使用 execute_script 传递元素进行点击
    # arguments[0] 代表传入的第一个参数,即上面的 link 对象
    driver.execute_script("arguments[0].click();", link)
    
 Exception  e:
    ()
:
    driver.quit()
except
as
print
f"操作失败:{e}"
finally

高级技巧:自定义等待条件

在动态页面中,元素状态可能随时变化(例如点击后文本更新)。使用显式等待(WebDriverWait)配合自定义预期条件是保证脚本稳定性的关键。

自定义等待类示例

当需要等待某个文本不再包含特定字符串时,可以定义一个类来实现:

class WaitForTextNotToEndWith(object):
    def __init__(self, locator, text):
        self.locator = locator
        self.text = text

    def __call__(self, driver):
        try:
            element_text = driver.find_element(*self.locator).text.strip()
            return not element_text.endswith(self.text)
        except Exception:
            return False

# 使用示例
wait = WebDriverWait(driver, 30)
condition = WaitForTextNotToEndWith((By.CLASS_NAME, 'vbseo_liked'), "11 others like this.")
wait.until(condition)
print("Success!")

模拟原生点击事件

有时简单的 .click() 无法触发某些特定的 JS 监听器,此时可以在 execute_script 中模拟原生事件:

function eventFire(el, etype){
    if (el.fireEvent) {
        el.fireEvent('on' + etype);
    } else {
        var evObj = document.createEvent('Events');
        evObj.initEvent(etype, true, false);
        el.dispatchEvent(evObj);
    }
}
// 在 Python 中调用
driver.execute_script(
    "eventFire(arguments[0], 'click');",
    link
)

Python 技术栈系统学习路径

掌握爬虫只是 Python 应用的一个方向。为了构建完整的数据能力体系,建议按照以下阶段进行系统性学习。

一、Python 基础

任何高级应用都建立在扎实的基础之上。必须熟练掌握以下内容:

  • 基本语法:变量、数据类型、控制流(if/else, for/while)。
  • 数据结构:列表、字典、集合、元组的增删改查。
  • 函数与模块:函数定义、参数传递、导入标准库。
  • 面向对象编程:类、继承、多态、封装。
  • 异常处理:try-except-finally 机制。

二、网络爬虫进阶

除了 Selenium,还需掌握更高效的静态页面抓取工具:

  • Requests 库:发送 HTTP 请求,处理 Headers 和 Cookies。
  • BeautifulSoup / lxml:解析 HTML/XML 文档。
  • Scrapy 框架:企业级爬虫框架,支持异步并发、中间件、管道。
  • 反爬策略应对:IP 代理池、User-Agent 轮换、验证码识别。

三、数据处理与分析

采集到的数据需要经过清洗和分析才能产生价值:

  • Pandas:DataFrame 操作,数据清洗、聚合、透视表。
  • NumPy:数值计算基础。
  • Matplotlib / Seaborn:数据可视化图表绘制。

四、数据库与 ETL

数据存储是数据工程的核心环节:

  • SQL 基础:MySQL/PostgreSQL 的增删改查、索引优化。
  • ETL 流程:Extract(抽取)、Transform(转换)、Load(加载)。
  • NoSQL:MongoDB 等文档型数据库的应用场景。

五、机器学习与人工智能

数据分析的高级应用涉及预测与决策:

  • Scikit-learn:经典机器学习算法实现。
  • 深度学习基础:TensorFlow 或 PyTorch 的基本概念。
  • 模型评估:准确率、召回率、混淆矩阵等指标。

六、工程化与部署

将脚本转化为可维护的服务:

  • 虚拟环境管理:venv, conda。
  • 任务调度:Cron, Airflow。
  • API 开发:Flask/FastAPI 接口封装。
  • 容器化:Docker 基础使用。

结语

学习编程并非一蹴而就,需要长期的坚持和训练。通过掌握 Selenium 解决动态交互问题,并建立从基础语法到数据分析的完整知识树,你将具备强大的数据采集与处理能力。建议在实践中不断复盘,针对具体业务场景优化技术方案,从而真正提升工程落地能力。

目录

  1. Python 爬虫与 Selenium 动态页面抓取实战
  2. 前言
  3. 核心问题:Selenium 执行 JavaScript 点击失效
  4. 常见错误示例
  5. 错误示范
  6. 正确解决方案
  7. 初始化浏览器 (推荐使用 Chrome)
  8. 高级技巧:自定义等待条件
  9. 自定义等待类示例
  10. 使用示例
  11. 模拟原生点击事件
  12. Python 技术栈系统学习路径
  13. 一、Python 基础
  14. 二、网络爬虫进阶
  15. 三、数据处理与分析
  16. 四、数据库与 ETL
  17. 五、机器学习与人工智能
  18. 六、工程化与部署
  19. 结语
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • ROS 2 实战:海龟仿真器启动与 ros2 run 命令详解
  • 机器人仿真入门:使用 Isaac Lab 训练 Cartpole 平衡机器人
  • 前端如何实现记住密码功能
  • PySide6 入门指南:基础控件与信号槽机制
  • Java 核心面试知识点与实战解析
  • 基于 AI 辅助开发的在线图书借阅系统实现
  • C++ 命名空间详解:从 std 角度理解作用域与最佳实践
  • 数据库连接池配置策略:高并发下的性能优化实践
  • RAG 系统检索机制是否必须追求极致完美?
  • 前端监控实践:错误、性能与用户行为追踪
  • 无人机视觉目标检测数据集 VisDrone 详解与数据预处理
  • Qlib:AI 导向量化投资平台快速入门
  • LLaMA-Factory 本地部署与安装指南
  • 前端微前端架构:告别巨石应用
  • 2026 马年春晚 15 个 AI 技术亮点回顾
  • Spring Web MVC 核心概念与实战指南
  • LangChain 实战:构建微博大 V 推荐智能体
  • BERT 预训练任务与微调技术详解
  • 利用 AI 构建小红书卡片 MCP 工具实战
  • Llama3-8B 实测对比:性能、逻辑与编码能力评估

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online