Pyppeteer中文文档

2023-09-22 15:23:54

介绍

Pyppeteer是Puppeteer Javascript(无头) chrome/chromium 浏览器自动化库的Python非官方端口,Puppeteer是在Node.js中使用的,而Pyppeteer是专用于Python语言的。
本文档对应的是Pyppeteer的v0.0.25版本,从目前情况来看,Pyppeteer已经很久没更新了,但对于要求不是非常高的爬虫和自动化测试使用起来还是没问题的。
当前文章中会介绍一下安装、使用等一些注意事项,在后续的文章中会逐一介绍各个API类的功能。 Pyppeteer目前支持Python3.5、3.6、3.7,但不建议在3.5的版本中使用,最佳的使用环境为3.6+。

在这里插入图片描述

安装

在已安装了Python3.6+的情况下,以windows为例,Win+R -> cmd -> 回车,打开cmd窗口。
输入:pip install pyppeteer,等待安装完毕即可。
如果需要最新版(开发版)的pyppeteer,可以通过pip命令从github地址进行安装。
输入:pip install -U git+https://github.com/miyakogi/pyppeteer.git@dev,等待安装完毕即可。

使用

在第一次使用Pyppeteer时,它会自动下载最新版本的Chromium(~170MB Mac, ~282MB Linux, ~280MB Win),如果你不希望它自动下载,那么在运行任何Pyppeteer脚本之前,手动运行pyppeteer-install命令即可下载(似乎这没什么用,普遍情况下我们都会采用自动下载的方式)。

示例:打开页面并截屏

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('http://example.com')
    await page.screenshot({'path': 'example.png'})
    await browser.close()

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

示例:在页面中执行脚本

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('http://example.com')
    await page.screenshot({'path': 'example.png'})

    dimensions = await page.evaluate('''() => {
        return {
            width: document.documentElement.clientWidth,
            height: document.documentElement.clientHeight,
            deviceScaleFactor: window.devicePixelRatio,
        }
    }''')

    print(dimensions)
    #>>> {'width': 800, 'height': 600, 'deviceScaleFactor': 1}
    await browser.close()

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

Pyppeteer拥有几乎和Puppeteer一样的API,更多API详情可以查看后续文章。

Pyppeteer与Puppeteer之间的差异

Pyppeteer和Puppeteer类似,由于Python和Javascript在语法、特性、主要发展领域的一些差异,在使用及运行效率上略有区别,但不影响其结果。

选项的关键字参数

Puppeteer使用对象(Python使用字典)组成选项传递给方法或函数,Pyppeteer可接受字典类型和关键字参数类型作为选项。

字典样式选项(类似于Puppeteer)

browser = await launch({'headless': True})

关键字参数样式参数

browser = await launch(headless=True)

元素选择器方法名称($->querySelector)

在Python中, 不能用于方法名称,所以使用 P a g e . q u e r y S e l e c t o r ( ) 、 P a g e . q u e r y S e l e c t o r A l l ( ) 、 P a g e . x p a t h ( ) 代替 P a g e . 不能用于方法名称,所以使用Page.querySelector()、Page.querySelectorAll()、Page.xpath()代替Page. 不能用于方法名称,所以使用Page.querySelector()Page.querySelectorAll()Page.xpath()代替Page.()、Page.$ ( ) 、 P a g e . ()、Page. ()Page.x()。Pyppeteer也有这些方法简写Page.J()、Page.JJ()、Page.Jx()。

Page.evaluate()和Page.querySelectorEval()的参数

Puppeteer的evaluate()采用原生的Javacript函数或Javascript表达式字符串,Pyppeteer采用Javascript字符串。Javascript字符串可以是函数或者表达式。Pyppeteer会自动尝试检查字符串是函数还是表达式,但有时会失败。如果表达式字符被视为函数并应发错误,可以添加force_expr=True参数,这将强制Pyppeteer把字符串视为表达式。

示例:获取页面内容

content = await page.evaluate('document.body.textContent', force_expr=True)

示例:获取元素的内部文本

element = await page.querySelector('h1')
title = await page.evaluate('(element) => element.textContent', element)
更多推荐

2023华为杯研究生数学建模E题思路代码分析

完整的思路代码查看文末名片血肿扩张风险相关因素探索建模。请根据“表1”(字段:入院首次影像检查流水号,发病到首次影像检查时间间隔),“表2”(字段:各时间点流水号及对应的HM_volume),判断患者sub001至sub100发病后48小时内是否发生血肿扩张事件。结果填写规范:1是0否,填写位置:“表4”C字段(是否发

netty报文解析之粘包半包问题

粘包问题Netty的粘包问题是指在网络传输过程中,由于TCP协议本身的特点,导致发送方发送的若干个小数据包被接收方合并成了一个大数据包。这种情况称为粘包。TCP协议是面向流的协议,没有数据边界,发送方发送的数据可能会被分成多个数据包进行发送,接收方则需要将这些数据包重新组装为原始数据。当接收方处理不当时,就可能会发生粘

【JavaWeb】你这么厉害,知道RBAC权限模型和ABAC权限模型吗?

文章目录一.RBAC权限模型1.RBAC的组成2.RBAC模型分类2.1.基本模型RBAC02.2.角色分层模型RBAC12.3.角色限制模型RBAC22.4.统一模型RBAC33.RBAC0模型核心表结构3.1.表结构设计3.2.模块划分4.基于RBAC的延展—用户组二.ABAC权限模型(基于Java讲解)1.ABA

人机中的事实与价值时空、排序

人机结合智能与事实价值融合分析确实是未来解决复杂疑难问题的基本策略之一。该策略利用人类智慧和机器智能相结合,结合有效的事实和价值分析方法,以更全面、准确、高效地解决问题。通过人机结合,可以充分发挥人类的主观能动性、判断力和创造力,同时借助机器的强大计算和数据处理能力,提供更深入、广泛的信息搜索、筛选和分析。这种结合能够

7.2、如何理解Flink中的水位线(Watermark)

目录0、版本说明1、什么是水位线?2、水位线使用场景?3、设计水位线主要为了解决什么问题?4、怎样在flink中生成水位线?4.1、自定义标记Watermark生成器4.2、自定义周期性Watermark生成器4.3、内置Watermark生成器-有序流水位线生成器4.4、内置Watermark生成器-乱序流水位线生成

基于springboot广场舞团系统springboot16

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路,向着优秀程序员前行!🍅更多优质项目👇🏻👇🏻可点击下方获取🍅文章底部或评论区获取🍅Java项目精品实

Linux安装mysql数据库并实现主从搭建

一.环境说明【环境说明】:192.168.110.161mysql-master##网络配置到位,防火墙关闭,selinux关闭192.168.110.162mysql-slave##网络配置到位,防火墙关闭,selinux关闭两台主机,操作系统是centos7,提前网络配置好,关闭防火墙,selinux,修改主机名二

esbuild中文文档-路径解析配置项(Path resolution - External、Main fields)

文章目录路径解析配置项Pathresolution外部模块External主字段Mainfields对于包的开发者结语哈喽,大家好!我是「励志前端小黑哥」,我带着最新发布的文章又来了!老规矩,小手动起来~点赞关注不迷路!esbuild简单介绍esbuild为了突破了JavaScript语言的瓶颈,采用了Go语言编写,构

Vue 如何监听 localstorage的变化

一.说明在日常开发中,我们经常使用localStorage来存储一些变量。这些变量会存储在浏览中。对于localStorage来说,即使关闭浏览器,这些变量依然存储着,方便我们开发的时候在别的地方使用。二.localStorage的使用存储值:window.localStorage.setItem(‘键名’,值)读取值

紫禁之巅-Unity游戏开发教程:勇者斗恶龙之魔法石

说明开设了一个unity游戏开发课程,可以帮助对游戏开发有兴趣的小伙伴学习Unity游戏开发的知识和技术,课程地址第一节课的课件是游戏工程,第二节的课件是大纲,和文章内相同,其它章节的课件和第一节课的相同,不需要重复下载课程大纲课程简介开设课程是为了帮助对游戏开发感兴趣的小伙伴掌握游戏开发的思路、方法、技术。为了帮助学

ps打开找不到MSVCP140.dll重新安装方法,安装ps出现msvcp140.dll缺失解决方法

在计算机中,我们可能会遇到许多问题,其中之一就是找不到msvcp140.dll文件。msvcp140.dll是一个动态链接库文件,它是MicrosoftVisualC++2015Redistributable的一部分。当计算机找不到这个文件时,可能会导致程序无法正常运行。本文将为您提供多个解决方法,以及msvcp140

热文推荐