【无标题】使用 Playwright 实现跨 Chromium、Firefox、WebKit 浏览器自动化操作

环境安装

首先要安装 Playwright 及其依赖库,命令如下:

复制代码
 

Bash

pip install playwright pillow pytesseract

playwright install

这里安装了 Playwright、Pillow(用于图像处理)、pytesseract(用于 OCR 识别),并安装了所需的浏览器驱动2

代码示例

以下是一个简单的使用 Playwright 实现跨浏览器自动化操作的 Python 代码示例:

复制代码
 

Python

import asyncio

from playwright.async_api import async_playwright

async def main():

async with async_playwright() as p:

# 启动 Chromium 浏览器

browser_chromium = await p.chromium.launch(headless=False)

page_chromium = await browser_chromium.new_page()

await page_chromium.goto("https://www.example.com")

await page_chromium.screenshot(path="chromium_screenshot.png")

await browser_chromium.close()

# 启动 Firefox 浏览器

browser_firefox = await p.firefox.launch(headless=False)

page_firefox = await browser_firefox.new_page()

await page_firefox.goto("https://www.example.com")

await page_firefox.screenshot(path="firefox_screenshot.png")

await browser_firefox.close()

# 启动 WebKit 浏览器

browser_webkit = await p.webkit.launch(headless=False)

page_webkit = await browser_webkit.new_page()

await page_webkit.goto("https://www.example.com")

await page_webkit.screenshot(path="webkit_screenshot.png")

await browser_webkit.close()

asyncio.run(main())

在上述代码中,使用 async_playwright 异步启动不同的浏览器(Chromium、Firefox、WebKit),然后打开指定的网页并进行截图,最后关闭浏览器。

反爬与动态内容处理

现代网站存在诸多反爬机制和动态内容,Playwright 可以很好地应对这些问题。例如,对于 JS 动态渲染与加载的页面,Playwright 会自动加载页面并等待 JS 执行;对于 JS 挑战(如滑动验证),可以模拟真实用户滑动或点击操作;对于图片验证码识别,可以截图验证码区域,利用 OCR 自动识别;对于登录态维护,可以使用 Playwright 的 cookie 管理来保持会话2

并发优化

可以结合 asyncio 实现并发操作,提高爬取效率。以下是一个简单的并发示例:

复制代码
 

Python

import asyncio

from playwright.async_api import async_playwright

async def scrape_page(browser_type):

async with async_playwright() as p:

browser = await getattr(p, browser_type).launch(headless=False)

page = await browser.new_page()

await page.goto("https://www.example.com")

await page.screenshot(path=f"{browser_type}_screenshot.png")

await browser.close()

async def main():

tasks = [scrape_page("chromium"), scrape_page("firefox"), scrape_page("webkit")]

await asyncio.gather(*tasks)

asyncio.run(main())

在这个示例中,使用 asyncio.gather 并发地对不同浏览器进行操作,提高了爬取效率。

相关推荐
跨境麦香鱼几秒前
Playwright vs Puppeteer:2026自动化任务与爬虫工具如何选?
运维·爬虫·自动化
李李李勃谦5 分钟前
Flutter 框架跨平台鸿蒙开发 - 小众景点发现
flutter·华为·harmonyos
见山是山-见水是水5 分钟前
Flutter 框架跨平台鸿蒙开发 - 邻里互助服务平台
flutter·华为·harmonyos
北京耐用通信7 分钟前
不换设备、不重写程序:耐达讯自动化网关如何实现CC-Link IE转Modbus TCP的高效互通?
人工智能·科技·物联网·网络协议·自动化·信息与通信
计算机毕业设计指导7 分钟前
基于机器学习和深度学习的恶意WebURL检测系统实战详解
人工智能·深度学习·机器学习·网络安全
xingyuzhisuan10 分钟前
Blender渲染加速:4090服务器OptiX后端性能提升50%
运维·服务器·性能优化·gpu算力
酒鼎11 分钟前
学习笔记(12-02)事件循环 - 实战案例 —⭐
前端·javascript
提子拌饭13312 分钟前
3D 旋转卡片:鸿蒙Flutter 实现的交互式 3D 卡片效果
flutter·华为·harmonyos·鸿蒙
提子拌饭13312 分钟前
星芒便签:鸿蒙Flutter框架 实现的美观便签应用
flutter·华为·架构·开源·harmonyos·鸿蒙
一直在想名14 分钟前
Flutter 框架跨平台鸿蒙开发 - 亲子故事共创
flutter·华为·harmonyos