Pyppeteer:如何在 Python 中使用 Puppeteer 和 Browserless?

news2024/10/9 18:44:07

Python 中的 Pyppeteer 是什么?

Pyppeteer 是流行的 Node.js 库 Puppeteer 的 Python 移植版本,用于以编程方式控制无头 Chrome 或 Chromium 浏览器。

本质上,Pyppeteer 允许 Python 开发人员在 Web 浏览器中自动执行任务,例如抓取网页、测试 Web 应用程序或与网站交互,就好像真实用户在操作一样,但无需图形界面。

Browserless 是什么?

Browserless 是一种基于云的浏览器解决方案,可以有效地进行浏览器自动化、网站抓取和测试。

它利用了 Nstbrowser 的指纹库来实现随机指纹切换,从而实现无缝数据收集和自动化。Browserless 强大的云基础设施通过允许同时访问多个浏览器实例,简化了自动化活动的管理。

你是否对网页抓取和 Browserless 有任何奇妙的想法和疑问?
让我们看看其他开发者在 Discord 和 Telegram 上分享了什么!

Pyppeteer 可以做什么?

使用 Pyppeteer 屏幕截图

使用 Browserless 时,你无法看到任何屏幕,因此当我们需要了解某些链接中浏览器的特定屏幕时,建议你使用 screenshot API 获取屏幕截图。

执行以下脚本将在当前脚本路径下生成名为 youtube_screenshot.png 的屏幕截图:

import asyncio
from pyppeteer import connect

async def main():
    # 连接到浏览器
    browser = await connect(browserWSEndpoint=browser_ws_endpoint)
    print("已连接!")

    # 创建一个新页面
    page = await browser.newPage()

    # 访问 youtube
    await page.goto("https://www.youtube.com/")
    # 拍摄屏幕截图
    await page.screenshot({"path": "youtube_screenshot.png"})
    await page.close()

asyncio.run(main())

与动态页面交互

在现代网站上,JavaScript 用于动态更新内容。例如,社交媒体平台通常在其帖子中使用无限滚动,页面数据的加载还需要等待后端的响应,以及各种表单操作和各种浏览器事件。

是的,Pyppeteer 也可以做到:等待加载、点击按钮、输入表单以及其他浏览器操作。

1. 等待页面加载

常用的等待页面加载的 API 是 waitForSelector 和 waitFor

  • waitForSelector 主要用于确保页面中某个元素正常加载
  • waitFor 只是等待指定时间。
import asyncio
from pyppeteer import connect

async def main():
    # 连接到浏览器
    browser = await connect(browserWSEndpoint=browser_ws_endpoint)
    print("已连接!")

    # 访问 nasa
    page = await browser.newPage()
    await page.goto("https://www.disney.com/")

    # 等待新闻加载
    await page.waitForSelector('.content-body')
    # 再等待 2 秒
    await page.waitFor(2000)
    # 拍摄屏幕截图
    await page.screenshot({"path": "disney.png"})
    await page.close()

asyncio.run(main())
2. 滚动页面

在 page.evaluate 中,可以通过调用窗口 API 设置滚动条的位置,非常方便。

import asyncio
from pyppeteer import connect

async def main():
    # 连接到浏览器
    browser = await connect(browserWSEndpoint=browser_ws_endpoint)
    print("已连接!")

    # 访问 HBO Max
    page = await browser.newPage()
    await page.goto('https://www.max.com/');

    # 滚动到底部
    await page.evaluate("window.scrollTo(0, document.documentElement.scrollHeight)");
    # 拍摄屏幕截图
    await page.screenshot({"path": "HBOMax.png"})
    await page.close()

asyncio.run(main())
3. 点击按钮

在 Python Pyppeteer 中,可以使用 page.click 来点击按钮或超链接。设置输入延迟使其更像真实用户的操作。

以下是一个简单的示例。

import asyncio
from pyppeteer import connect

async def main():
    # 连接到浏览器
    browser = await connect(browserWSEndpoint=browser_ws_endpoint)
    print("已连接!")

    page = await browser.newPage()
    await page.goto("https://example.com/")

    # 点击链接
    await page.click("p > a", {"delay": 200})
    # 拍摄屏幕截图
    await page.screenshot({"path": "example.png"})
    await page.close()

asyncio.run(main())
4. 表单输入

如何使用 Python Pyppeteer 输入数据?请使用 page.type 在指定的输入框中输入内容。

import asyncio
from pyppeteer import connect

async def main():
    # 连接到浏览器
    browser = await connect(browserWSEndpoint=browser_ws_endpoint)
    print("已连接!")

    # 创建一个新页面
    page = await browser.newPage()
    # 访问 chrome 开发者
    await page.goto("https://developer.chrome.com/")
    await page.setViewport({"width": 1920, "height": 1080})

    # 在搜索框中输入内容
    await page.type(".devsite-search-field", "headless", {"delay": 200})

    # 拍摄屏幕截图
    await page.screenshot({"path": "developer.png"})
    await page.close()

asyncio.run(main())

使用 Pyppeteer 登录

通过以上示例,我们可以轻松想到登录涉及的交互,例如输入类型操作和按钮点击操作。

因此,在以下示例中,让我们改变编写方法。我们将尝试登录 Nstbrowser Client。登录后,我将拍摄屏幕截图以验证是否成功。

import asyncio
from pyppeteer import connect

async def main():
    # 连接到浏览器
    browser = await connect(browserWSEndpoint=browser_ws_endpoint)
    print("已连接!")

    # 访问 Nstbrowser Client
    page = await browser.newPage()
    await page.goto("https://app.nstbrowser.io/account/login")

    await page.waitForSelector("input")
    inputs = await page.querySelectorAll("input")
    # 在第一个输入框中输入你的电子邮件地址
    await inputs[0].type("18552540330@163.com", delay=100)
    # 在第二个输入框中输入你的密码
    await inputs[1].type("9KLYUWn3GmrzHPRGQl0EZ1QP3OWPFwcB", delay=100)

    buttons = await page.querySelectorAll("button")
    # 点击登录按钮
    await buttons[1].click()

    # 等待登录请求响应
    login_url = "https://api.nstbrowser.io/api/v1/passport/login"
    await page.waitForResponse(lambda res: res.url == login_url)
    await page.waitFor(2000)

    # 拍摄屏幕截图
    await page.screenshot({"fullPage": True, "path": "./nstbrowser.png"})
    await page.close()

asyncio.run(main())
  • 运行结果:

我们可以看到我们的项目已被重定向到主页,这表明我们已成功登录 Nstbrowser!

如何在 Browserless 中使用 Pyppeteer?

Pyppeteer 可以与 Browserless 协同工作吗?

当然可以,你可以找到将 Pyppeteer 集成到 Browserless 的具体步骤!

步骤 1:获取 API KEY

在开始之前,我们需要拥有 Browserless 服务。使用 Browserless 可以解决复杂的 Web 抓取和大型自动化任务,并且现在已经实现了完全托管的云部署。

Browserless 采用以浏览器为中心的 approach,提供强大的无头部署功能,并提供更高的性能和可靠性。有关 Browserless 的更多信息,你可以访问官网了解更多。

获取 API KEY 并转到 Nstbrowser 客户端的 Browserless 菜单页面,或者你可以进入 Browserless 页面进行访问:

步骤 2:安装 Pyppeteer

Pyppeteer 是 Puppeteer 的 Python 版本,提供类似的功能,允许开发人员使用 Python 脚本控制无头浏览器。它使开发人员能够通过 Python 代码自动执行与网页的交互,在爬虫、测试和数据采集等场景中非常常用。

pip install pyppeteer

步骤 3:将 Pyppeteer 连接到 Browserless

我们需要准备以下代码。只需填写你的 API key 和 代理 即可连接到 Browserless。

from urllib.parse import urlencode
import json

token = "你的 api key" # '必填'
config = {
    "proxy": "你的代理",  # 必填;输入格式:schema://user:password@host:port 例如:http://user:password@localhost:8080
    # "platform": "windows",  # 支持:windows、mac、linux
    # "kernel": 'chromium', # 只支持:chromium
    # "kernelMilestone": '128', # 支持:128
    # "args": {
    #     "--proxy-bypass-list": "detect.nstbrowser.io"
    # }, # 浏览器参数
    # "fingerprint": {
    #     userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.85 Safari/537.36', # userAgent 支持从 v0.15.0 开始
    # },
}
query = urlencode({"token": token, "config": json.dumps(config)})
browser_ws_endpoint = f"ws://less.nstbrowser.io/connect?{query}"

已连接,让我们开始抓取!

import asyncio
from pyppeteer import connect

async def main():
    # 连接到浏览器
    browser = await connect(browserWSEndpoint=browser_ws_endpoint)
    print("已连接!")

asyncio.run(main())

步骤 4:在 Browserless 中使用 Pyppeteer

在本博文中,我们将深入了解一个简单的案例,帮助你快速开始使用 Browserless - 抓取 Books to Scrape。

在以下示例中,我们尝试抓取当前页面上的所有书籍标题:

  • 打开页面
  • 等待页面正常加载
  • 打开调试控制台
  • 确定任何位置的书籍标题对应的 HTML 元素:

  • 脚本:
import asyncio
from pyppeteer import connect

async def main():
    # 连接到浏览器
    browser = await connect(browserWSEndpoint=browser_ws_endpoint)
    print("已连接!")

    # 创建一个新页面
    page = await browser.newPage()

    # 访问 Books to Scrape
    await page.goto("http://books.toscrape.com/")

    # 等待书籍列表加载
    await page.waitForSelector("section")

    # 选择所有书籍标题元素
    books = await page.querySelectorAll("article.product_pod > h3 > a")

    # 循环遍历所有元素以提取标题
    for book in books:
        title_element = await book.getProperty("textContent")
        title = await title_element.jsonValue()
        print(f"[{title}]")

    await page.close()

# 运行脚本
asyncio.run(main())
  • 结果:

运行上述脚本将在控制台中输出所有捕获的数据:

步骤 5:检查 Browserless 仪表板中的数据

你可以在 Nstbrowser 客户端的 Browserless 菜单中查看最近请求的统计信息和剩余会话时间。

在仪表板中检查数据

使用 Pyppeteer 时常见的错误

大多数开发人员在设置和使用 Pyppeteer 时可能会遇到一些错误。别担心!你可以在这里找到解决方法。

错误 1:无法安装 Pyppeteer

在安装 Pyppeteer 时,你可能会遇到错误“无法安装 Pyppeteer”。

请检查系统上的 Python 版本。Pyppeteer 只支持 Python 3.6+。因此,请尝试 升级 Python 并重新安装 Pyppeteer

错误 2:Pyppeteer 浏览器意外关闭

在首次安装后执行 Pyppeteer Python 脚本时,你可能会遇到此错误:pyppeteer.errors.BrowserError: Browser closed unexpectedly

这意味着所有 Chromium 依赖项尚未完全安装。请使用以下命令手动安装 Chrome 驱动程序:

pyppeteer-install

总结

Pyppeteer 是经典 Node.js Puppeteer 库的非官方 Python 移植版本。它是一个易于安装、轻量级且快速的包,用于 Web 自动化和动态网站抓取。

在本博文中,你已经学习了:

  • Pyppeteer 是什么?
  • 将 Pyppeteer 集成到 Browserless 的具体步骤。
  • Pyppeteer 的其他用例。

如果你想了解更多关于 Browserless 的功能,请查看 官方手册。Nstbrowser 为你提供最佳的云浏览器,以解决自动化工作的本地局限性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2199728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

webm格式怎么转换成mp4?值得给你推荐的几种简单方法

webm格式怎么转换成mp4?MP4支持多种音频和视频编解码器,如H.264和AAC,用户可以根据需要调整视频和音频质量,以满足不同需求。同时,许多视频编辑软件广泛支持MP4格式,使得剪辑、合成和特效处理变得更加便捷。…

人工智能、人机交互和机器人国际学术会议

第三届人工智能、人机交互和机器人国际学术会议 (AIHCIR 2024)组委会热忱地邀请您参与本届大会。本届大会旨在聚集领先的科学家、研究人员和学者,共同交流和分享在人工智能、人机交互和机器人各个方面的经验和研究成果,为研究人员…

【C++】模板(初识):函数模板、类模板

本篇主要介绍C中的模板初阶的一些知识。模板分为函数模板和类模板,我们一个一个来看。 1.函数模板 1.1函数模板概念 函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实际的参数类型产生函数特定版本。…

LSTM时间序列模型实战——预测上证指数走势

LSTM时间序列模型实战——预测上证指数走势 关于作者 作者:小白熊 作者简介:精通python、matlab、c#语言,擅长机器学习,深度学习,机器视觉,目标检测,图像分类,姿态识别,…

五款软件助你秒变职场达人

✨ 每天忙碌于工作,却感觉事半功倍?别担心,今天就为大家揭秘5款高效工作软件,让你秒变职场达人,效率直线飙升!🎉 1️⃣ 亿可达 🏗️ 软件连接神器 🎯 特点&#xff1a…

Java后端面试很水的,7天就能搞定!

随着Java的越来越卷,面试也直接上难度了,从以前的八股文到场景题了,尤其是有经验的去面试,场景题都是会问的,近期面试过的应该都深有体会! 场景题230道: 1.分布式锁加锁失败后的等待逻辑是如何…

项目管理全流程包括哪些环节,一文读懂项目管理全流程

项目管理全流程是一个系统性、阶段性的过程,旨在确保项目从启动到完成的高效运行。该流程包括以下几个关键阶段:项目管理全流程是确保项目从启动到完成顺利进行的一系列阶段和活动的总称。 以下是基于项目管理全流程对项目管理的描述: 一、…

单路测径仪的详细介绍

蓝鹏测控单路测径仪是一种高精度、高效率的在线检测设备,广泛应用于线缆、电缆、电线、胶管、塑料管、金属丝等行业的生产过程中。以下是对该产品的详细介绍: 一、核心技术与工作原理 蓝鹏测控单路测径仪以光电检测为核心,结合单片机、LED灯、…

Qt-QStatusBar窗口状态栏相关操作(48)

目录 描述 使用 设置临时消息 添加子控件 添加 Labe 添加 进度条 从右边添加 按钮 描述 状态栏是应⽤程序中输出简要信息的区域。⼀般位于主窗⼝的最底部,⼀个窗⼝中最多只能有⼀个状态栏。在 Qt 中,状态栏是通过 QStatusBar类 来实现的。在状态…

Linux-处理用户输入

命令行参数 特殊参数变量 移动变量 处理选项-查找选项 处理选项-使用getopt命令 获得用户输入

讲座在线预约管理系统的设计与实现使用SpringBootSSM框架开发

目录 摘要 1 引言 2 系统需求分析 3 技术选型 4 系统架构设计 5 核心功能实现 5.1 用户管理 5.2 讲座管理 5.3 预约管理 5.4 评论系统 6 安全性考虑 7 测试 8 结论 摘要 本文旨在设计和实现一个基于Spring Boot SSM框架的讲座在线预约管理系统,并结合…

【Linux进程间通信】深入探索:Linux下的命名管道与System V共享内存

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:Linux “ 登神长阶 ” 🌹🌹期待您的关注 🌹🌹 ❀Linux进程间通信 📒1. 命名管道📙2. 命名管道实现server&client通…

环境变量及命令行参数

目录 一、环境变量的概念和基本命令 二、环境变量的组织结构及获取环境变量的方式 (1)组织结构 (2)获取环境变量 命令行第三个参数 通过第三方变量environ获取 通过系统调用getenv获取 三、命令行参数 一、环境变量的概念和…

Go语言对接微信支付与退款全流程指南

在互联网技术日益发展的今天,线上支付已成为不可或缺的一部分。作为一门简洁高效的编程语言,Go(又称Golang)凭借其强大的并发处理能力和高效性能,在后端开发领域越来越受到开发者的青睐。本文将详细介绍如何使用Go语言…

学习干货IF=93.6!开发临床预测模型:分步指南

预测患者未来结果对临床实践至关重要,有助于医生做出明智决策。尽管每年发布大量预测模型,但许多研究存在方法学局限,如样本量不足和模型验证不充分,这削弱了模型的实际应用价值。因此,必须深入探讨并改进这些局限性&a…

电力央企数智化转型中的大模型构建及智能巡检机器人的应用

在全球经济数字化转型的大背景下,电力行业面临着多重挑战,包括能源结构的转型、市场竞争的加剧以及环境保护的压力。电力央企作为国家能源供应的中坚力量,亟需通过数智化转型提升竞争力和服务水平。 随着今年年初我国首次将“开展‘人工智能行…

第十四届蓝桥杯嵌入式省赛程序设计题解析(基于HAL库)

一.题目分析 (1).题目 (2).题目分析 1.PWM输出分析 模式切换时,占空比要不变, 在五秒之内就要变化成目标频率,同时要求频率的步进值要小于200hz 为了使步进值小于200hz,那么在五秒的时间之内…

AI绘画:人工智能颠覆艺术创作的新时代

*AI绘画的震撼与魅力* 你是否曾幻想过,手握画笔便能创造出前所未有的艺术作品?当我们谈及艺术,总会联想到那份独特的创意和灵感。而如今,随着人工智能的迅猛发展,AI绘画正以其独特的方式,颠覆着传统的艺术…

XTR115电流环电路原理研究【文献】

作者:昝 勇,罗永红,王沛莹 中航工业 摘要: 针对各种数据采集与监控中抗恶劣电磁干扰环境的需求,给出一种基于XTB115的低功耗两线4~20 mA电流环数据传输电路,首先讨论了XTR115的性能特点和工作原…

RabbitMQ简介及安装类

RabbitMQ概述-MQ介绍 RabbitMQ是一个开源的消息代理和队列服务器,它支持多种消息协议,并且可以轻松地与多种编程语言和框架集成。RabbitMQ是使用Erlang语言编写的,因此它具有高并发和高可用性的特点。以下是RabbitMQ的一些关键特性和概念 消息…