跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python大前端

基于 Python 实现多浏览器并行注入的实战方案

基于 Python 的多浏览器并行注入方案,结合 Pyppeteer、Selenium 及 CDP 协议,利用多进程与异步并发技术,实现对多个浏览器实例的并行 JavaScript 代码注入。内容涵盖环境搭建、核心逻辑、并发优化及数据存储扩展,适用于自动化测试、数据采集及安全研究场景,有效提升浏览器操作效率与隔离性。

未来可期发布于 2026/3/28更新于 2026/10/2397 浏览
基于 Python 实现多浏览器并行注入的实战方案

基于 Python 实现多浏览器并行注入的实战方案

浏览器注入允许我们在运行中的浏览器进程中执行特定代码。在自动化测试、数据抓取或安全研究中,往往需要同时对多个浏览器实例进行操作以提升效率。本方案基于 Python,结合 Pyppeteer、Selenium 和 CDP 协议,实现多浏览器的并行注入。

环境配置

首先安装必要的依赖项:

pip install selenium pyppeteer

确保已安装 Chrome 或 Chromium,并开启远程调试模式支持。

核心实现

使用 Pyppeteer 进行注入

Pyppeteer 是 Puppeteer 的 Python 移植版,适合以编程方式控制 Chromium。

import asyncio
from pyppeteer import launch

async def inject_js(browser_id, url, script):
    print(f"[{browser_id}] 启动浏览器...")
    browser = await launch(headless=False, args=['--no-sandbox'])
    page = await browser.newPage()
    await page.goto(url)
    print(f"[{browser_id}] 注入 JavaScript 代码...")
    result = await page.evaluate(script)
    print(f"[{browser_id}] 执行结果:{result}")
    await browser.close()

async def main():
    url = "https://www.example.com"
    script = "document.body.style.backgroundColor = 'red'; '注入成功';"
    tasks = [inject_js(i, url, script) for i in range(5)]
    await asyncio.gather(*tasks)

asyncio.run(main())

注意:launch 方法用于启动浏览器,evaluate 则是执行 JS 的关键。实际运行时需注意沙箱参数 --no-sandbox 在某些 Linux 环境下的兼容性。

使用 Selenium 进行注入

Selenium 是经典的自动化工具,配合 multiprocessing 可实现多进程并行。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import multiprocessing

def inject_js_selenium(browser_id, url, script):
    print(f"[{browser_id}] 启动浏览器...")
    chrome_options = Options()
    chrome_options.add_argument("--headless")
    driver = webdriver.Chrome(service=Service("/path/to/chromedriver"), options=chrome_options)
    driver.get(url)
    print(f"[{browser_id}] 注入 JavaScript 代码...")
    driver.execute_script(script)
    print(f"[{browser_id}] 注入完成")
    driver.quit()

if __name__ == "__main__":
    url = "https://www.example.com"
    script = "document.body.style.backgroundColor = 'blue';"
    processes = []
    for i in range(5):
        p = multiprocessing.Process(target=inject_js_selenium, args=(i, url, script))
        p.start()
        processes.append(p)
    for p in processes:
        p.join()

这里使用 execute_script 执行 JS,并通过 multiprocessing 管理进程。记得将 /path/to/chromedriver 替换为实际路径。

使用 CDP 进行远程调试注入

CDP 提供了更底层的控制能力。

import asyncio
from pyppeteer import launch

async def inject_cdp(browser_id, url, script):
    browser = await launch(headless=False, args=['--remote-debugging-port=9222'])
    pages = await browser.pages()
    page = pages[0] if pages else await browser.newPage()
    await page.goto(url)
    print(f"[{browser_id}] 通过 CDP 注入 JavaScript 代码...")
    cdp_session = await page.target.createCDPSession()
    await cdp_session.send("Runtime.evaluate", {"expression": script})
    print(f"[{browser_id}] CDP 注入完成")
    await browser.close()

async def main():
    url = "https://www.example.com"
    script = "document.title = 'CDP 注入成功';"
    tasks = [inject_cdp(i, url, script) for i in range(3)]
    await asyncio.gather(*tasks)

asyncio.run(main())

优化与扩展

若需进一步提升并发效率,可考虑使用 ThreadPoolExecutor 或 asyncio.Queue 来调度任务。例如:

import concurrent.futures

def parallel_execution():
    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
        futures = {executor.submit(inject_js_selenium, i, "https://www.example.com", "console.log('执行 JS')") for i in range(5)}
        for future in concurrent.futures.as_completed(futures):
            print(future.result())

parallel_execution()

此外,执行结果可持久化存储至 MongoDB 或 Redis,便于后续分析。

总结

本方案通过 Pyppeteer、Selenium 和 CDP 三种方式,实现了多浏览器的 JavaScript 并行注入。核心在于利用 Python 的多进程与异步特性,有效隔离浏览器 Session,避免相互干扰。无论是自动化测试还是数据采集,这套流程都能显著提升执行效率。

目录

  1. 基于 Python 实现多浏览器并行注入的实战方案
  2. 环境配置
  3. 核心实现
  4. 使用 Pyppeteer 进行注入
  5. 使用 Selenium 进行注入
  6. 使用 CDP 进行远程调试注入
  7. 优化与扩展
  8. 总结

更多推荐文章

查看全部
  • Enterprise Architect 16 下载与安装指南
  • 基于 SpringBoot 和 Vue 的语言考试信息报名系统设计
  • KoboldAI 本地部署与配置实战指南
  • C++ 递归实战:合并有序链表与反转链表
  • Java 文件操作与基础:流对象、数字码表及缓冲区
  • 资深程序员分享的 20 条 Python 编程与学习经验
  • OpenClaw 开源 AI Agent 框架技术解析与实战指南
  • 树莓派 4 本地部署 ClawdBot:OCR/Whisper/vLLM 并发实战
  • C++ 面向对象编程:深入解析继承机制
  • 商汤开源 SenseNova-MARS 多模态自主推理模型
  • 微分的本质:从变化率到线性映射的 Python 可视化
  • Rasa 实战:解决 Transliteration 与 CountVectorsFeaturizer 的冲突问题
  • Page-Agent:一行 JS 代码实现大模型前端 DOM 操作
  • Python 全栈开发核心知识体系与实战进阶指南
  • AI 大模型时代:35 岁 + 程序员的职业发展路径与机遇
  • Java 部署:Jenkins Pipeline 自动化构建 Java 项目
  • 详解高速 ADC 的串行 LVDS 数据捕获与接口设计
  • JavaAI 插件安装与 Spring Boot 项目生成实战
  • 算法实战:Z 字形变换与外观数列模拟解法
  • 大模型开发框架 LangChain 入门与实战

相关免费在线工具

  • curl 转代码

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

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online