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

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 connectasync def main():# 连接到浏览器browser = await connect(browserWSEndpoint=browser_ws_endpoint)print("已连接!")# 创建一个新页面page = await browser.newPage()# 访问 youtubeawait 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 connectasync def main():# 连接到浏览器browser = await connect(browserWSEndpoint=browser_ws_endpoint)print("已连接!")# 访问 nasapage = 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 connectasync def main():# 连接到浏览器browser = await connect(browserWSEndpoint=browser_ws_endpoint)print("已连接!")# 访问 HBO Maxpage = 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 connectasync 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 connectasync 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 connectasync def main():# 连接到浏览器browser = await connect(browserWSEndpoint=browser_ws_endpoint)print("已连接!")# 访问 Nstbrowser Clientpage = 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 jsontoken = "你的 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 connectasync 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 connectasync def main():# 连接到浏览器browser = await connect(browserWSEndpoint=browser_ws_endpoint)print("已连接!")# 创建一个新页面page = await browser.newPage()# 访问 Books to Scrapeawait 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.rhkb.cn/news/443556.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多选框的单选操作 Element ui

文章目录 样式预览Q:为什么要这么做?实现原理探索路程 样式预览 Q:为什么要这么做? 单选框的样式不够好看单选框因为框架等原因,无法取消选择 实现原理 判断多选框绑定的 value,如果长度为2,那…

oracle-函数-instr()的妙用以及相似功能like

INSTR(C1,C2[,I[,J]]) 【功能】在一个字符串中搜索指定的字符,返回发现指定的字符的位置; 【说明】多字节符(汉字、全角符等),按1个字符计算 【参数】 C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1 J 第J次出现的位置,默认为1 【…

RTSP RTP RTCP SDP基础知识

理论 流(Streaming ) 是近年在 Internet 上出现的新概念,其定义非常广泛,主要是指通过网络传输多媒体数据的技术总称。 流式传输分为两种 顺序流式传输 (Progressive Streaming) 实时流式传输 (Real time Streaming) ​​​​​…

国产长芯微LDC5422单通道、16位、电流源和电压输出DAC,HART连接完全P2P替代AD5422

描述 LDC5422是低成本、精密、完全集成、16位数模转换器(DAC),内置可编程电流源和可编程电压输出,设计用于满足工业过程控制应用的需要。 输出电流范围可编程设置为4 mA至20 mA、0 mA至20 mA或者超量程的0 mA至24 mA。 此产品的LFCSP版本有一个CAP2引脚…

胤娲科技:00后揭秘——AI大模型的可靠性迷局

当智能不再“靠谱”,我们该何去何从? 想象一下,你向最新的GPT模型提问:“9.9和9.11哪个大?”这本应是个小菜一碟的问题,却足以让不少高科技的“大脑”陷入沉思, 甚至给出令人啼笑皆非的答案。近…

vite学习教程06、vite.config.js配置

前言 博主介绍:✌目前全网粉丝3W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容:Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。 博主所有博客文件…

智能桥梁:Profinet至CanOpen,台达伺服无缝对接

在工业自动化领域,将西门子S7-1200系列PLC与具备CANOPEN通讯功能的伺服驱动器设备集成时,由于PLC默认采用PROFINET实时以太网通讯协议,直接连接存在协议不匹配问题。为解决这一挑战,开疆推出的Profinet转CANOPEN网关提供了高效便捷…

Java基础知识——String篇

一、String 1、是什么 String 是 Java 中用于表示字符串的类。Java 中的字符串是不可变的,也就是说一旦创建,字符串的内容无法更改。 2、如何构造 (1)无参数构造方法: String str new String(); //创建一个空字符…

sass学习笔记(1.0)

1.使用变量 sass可以像声明变量那样进行使用,这样同样的样式,就可以使用相同的变量来提高复用。 语法为:$ 变量名 在界面中也可以正常的显示 当然了,变量之间也可以相互引用,比如下面 div{$_color: #d45387;$BgColo…

Word 拼写检查如何关闭?2 步轻松搞定

在日常进行文档编辑操作的过程中,拼写词语错误是比较常见的,特别是文档中包含大量文字的时候,一不小心就有可能输错,Word 当然有功能可以辅助我们发现这些问题,这就是 Word 拼写检查功能。 Word 拼写检查功能可以自动…

Spring Boot学习资源库:Java开发者的新篇章

2 相关技术简介 2.1Java技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,任…

Java基本数据类型转换

一、自动类型转换 1.基本介绍 当Java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换数据类型按精度(容量)大小进行排序为: ![在这里插入图片描述](https://i-blog.csdnimg.…

【第2章 开始学习C++】C++语句

文章目录 导语声明语句和变量赋值语句cout的新花样使用cin类简介 导语 C 程序是一组函数, 而每个函数又是一组语句。 C 有好几种语句,例如:声明语句创建变量, 赋值语句给该变量提供一个值。 声明语句和变量 计算机是一种精确的…

Java 的数据结构整理(整合版)

Java 的数据结构整理(整合版) 一、数据输入输出 https://www.runoob.com/java/java-scanner-class.html 这部分是为了预防 leetcode 刷习惯了,忘记怎么处理输入输出的问题 数据输入 Java的数据输入和 C 相比非常繁琐,因此大多…

zookeeper API使用——znode的CRUD

这应该是目录 一、创建连接1.1构造函数1.2创建连接(封装) 二、节点操作2.1创建节点create语法代码 2.2获取节点数据getData语法代码 2.3获取子节点getChildren语法代码 2.4修改节点的值setData语法代码 2.5删除delete语法代码 以下的代码只能作为基础的语法使用,为了…

LangChain: 大语言模型的新篇章

本文介绍了LangChain框架,它能够将大型语言模型与其他计算或知识来源相结合,从而实现功能更加强大的应用。接着,对LangChain的关键概念进行了详细说明,并基于该框架进行了一些案例尝试,旨在帮助读者更轻松地理解LangCh…

65 切面AOP

65 切面AOP 切面基础概念 AOP:Aspect Oriented Programming,面向切面编程。是通过预编译方式(aspectj)或者运行期动态代理(Spring)实现程序功能的统一维护的技术。 面试问题: Spring的两大核心…

【VUE】双端比较算法

假设我们有两个虚拟节点 oldVnode 和 newVnode,它们分别对应的DOM结构为: 我们需要将 oldVnode 更新为 newVnode,这时就可以使用双端比较算法了。算法本质上是将新旧节点进行一次交叉比较,尽可能地重复使用已有的节点来达到最小…

懒人笔记-QT程序UOS打包篇

懒人笔记-uos打包篇 前言1、deploy2、组织打包目录2.1 控制文件2.1.1 control的内容:2.1.2 postinst的内容:2.1.3 postrm的内容: 2.2 执行程序2.3 开机自启(可选项) 3、输出deb安装包4、服务卸载4.1 服务卸载4.2 程序按…

Web自动化Demo-PHP+Selenium

1.新建工程 打开PhpStorm新建工程如下&#xff1a; 打开终端输入如下命令安装selenium&#xff1a; composer require php-webdriver/webdriver 2.编写代码 <?php require vendor/autoload.php;use Facebook\WebDriver\Remote\RemoteWebDriver; use Facebook\WebDriver…