Python pyppeteer 模块:使用教程

Python pyppeteer模块

pyppeteer 是一个基于 Python 的无头 Chromium 浏览器控制库,允许用户以编程方式与网页进行交互。它是 Puppeteer 的 Python 版本,适用于与现代网站进行复杂的操作,尤其是在需要模拟用户操作时特别有用。pyppeteer 官方支持的 Python 版本为 3.6 及以上。

使用 pyppeteer,开发者可以快速实现自动化测试、Web 爬虫、数据提取等任务。它能够处理 JavaScript 动态加载的内容,执行页面操作,以及获取页面数据等。

应用场景

pyppeteer 模块的应用场景广泛,包括:

  • 网站爬虫:抓取动态生成内容的网站,如社交媒体、新闻网站等。
  • 自动化测试:对网页表单、按钮等进行自动化操作和测试。
  • 截图与 PDF 生成:快速生成网页的截图或转换为 PDF 格式,以便分享或存档。

安装说明

pyppeteer 并不是 Python 的默认模块,因此需要通过 pip 来安装。可以使用以下命令安装:

1
pip install pyppeteer

安装时,将自动下载相应的 Chromium 浏览器版本,以便运行无头浏览器任务。

用法举例

1. 打开网页并截图

1
2
3
4
5
6
7
8
9
10
11
import asyncio  # 导入异步支持模块
from pyppeteer import launch # 从 pyppeteer 导入浏览器启动器

async def main():
browser = await launch() # 启动浏览器
page = await browser.newPage() # 新建一个页面
await page.goto('https://example.com') # 跳转到指定网址
await page.screenshot({'path': 'screenshot.png'}) # 截图并保存
await browser.close() # 关闭浏览器

asyncio.get_event_loop().run_until_complete(main()) # 运行异步函数

在这个示例中,程序启动一个无头浏览器,打开网站并截图,结果保存在 screenshot.png 文件中。

2. 填充表单并提交

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import asyncio
from pyppeteer import launch

async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('https://example.com/login') # 访问登录页面
await page.type('#username', 'myusername') # 填入用户名
await page.type('#password', 'mypassword') # 填入密码
await page.click('#submit') # 点击提交按钮
await page.waitForNavigation() # 等待页面加载
print(await page.content()) # 打印当前页面的 HTML 内容
await browser.close()

asyncio.get_event_loop().run_until_complete(main())

这个例子展示了如何访问一个登录页面,输入用户名和密码,并进行提交。

3. 抓取动态内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import asyncio
from pyppeteer import launch

async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('https://example.com/data') # 访问动态数据页面
await page.waitForSelector('.data-class') # 等待指定元素加载
data = await page.evaluate('''() => {
return Array.from(document.querySelectorAll('.data-class')).map(element => element.textContent);
}''') # 提取数据
print(data) # 打印抓取的数据
await browser.close()

asyncio.get_event_loop().run_until_complete(main())

在此示例中,程序访问一个动态内容的网页,并提取特定类名的文本内容,最终输出这些数据。


强烈建议大家关注我的博客全糖冲击博客,我的博客提供了全面的 Python 标准库使用教程,方便各位随时查询和学习。无论是新手还是有经验的开发者,都会在这里找到对自己有帮助的资料。我会不断更新内容,分享最新的技术和技巧,让大家快速掌握 Python 编程的要领,提升开发效率。希望能在博客中与大家一起成长!