浏览器注入是一种技术,允许我们在运行中的浏览器进程中注入代码,以便执行特定的任务。在某些场景下,如自动化测试、Web 数据抓取、安全性研究或扩展浏览器功能,我们可能需要同时对多个浏览器进行注入,以提高效率和并行能力。
方案概述
本方案基于 Python 语言,结合 Pyppeteer、Selenium 和 CDP(Chrome DevTools Protocol) 来实现同时进行多个浏览器的注入。该方案支持:
- 多进程并行注入:利用 Python 的
multiprocessing库并行控制多个浏览器实例。 - JavaScript 代码注入:通过 Chrome 的
evaluate方法动态执行 JavaScript 代码。 - 浏览器进程隔离:为每个浏览器分配独立的 Session,避免相互干扰。
- 数据通信与监控:通过 WebSocket 监听浏览器的执行状态,以便管理多个浏览器实例。
第一部分:环境配置
为了实现本方案,我们需要安装必要的依赖项:
pip install selenium pyppeteer
此外,我们需要 Chrome 或 Chromium 作为浏览器执行环境,并且确保 Chrome 允许远程调试模式。
第二部分:浏览器注入的核心逻辑
1. 使用 Pyppeteer 进行浏览器注入
Pyppeteer 是 Chrome Puppeteer 的 Python 版本,它允许我们以编程方式控制 Chromium,并执行 JavaScript 代码。
(1) 启动多个浏览器实例
使用 Pyppeteer,我们可以同时启动多个浏览器实例:
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()
():
url =
script =
tasks = [inject_js(i, url, script) i ()]
asyncio.gather(*tasks)
asyncio.run(main())


