Pyppeteer
介绍
Puppeteer
是基于Node.js
的一个开发工具,Pyppeteer
是其民间的Python
版本.和Selenium
类似,其也需要一个浏览器的内核,Pyppeteer
使用的是Chromium
浏览器.
其支持async
,能实现异步爬虫,效率更高.
使用
启动浏览器
使用 launch
方法能启动浏览器,通过改变该方法的参数,实现对浏览器的控制,示例代码如下:
import async
from pyppeteer import launch
browser = await launch()
参数列表:
- ignoreHTTPSError(bool):是否忽略HTTPS的错误,默认为 false
- headless(bool):是否启用无头模式,默认为 false
- executablePath(str):可执行文件的路径.指定该参数之后就能使用已有的Chrome或者Chromium
- slowMo(int|float):通过传入参数,控制Pyppeteer的模拟操作的间隔时间
- args(List[str]):在执行过程中传入的额外参数,该参数在模拟之前执行,所以可以用来伪装
- ignoreDefaultArgs(bool):是否忽略Pyppeteer的默认参数,慎用
- handleSIGINT(bool):是否响应
Ctrl+C
终止浏览器的信号,默认为true - handleSIGTERM(bool):是否响应kill命令,默认为true
- handlerSIGHUP(bool):是否响应挂起信号,,默认为true
- dumpio(bool):是否将Pyppeteer的输出内容传给stdout和stdin,默认为false
- userDataDir(str):用户数据文件夹,用于保留一些个性化配置和操作记录
- env(dict):环境变量,传入字典形式数据
- devtools(bool):是否为每一个页面开启调试工具,默认为false
- logLevel(int|str):日志级别,默认和 root logger 对象级别相同
- autoClose(bool):当命令执行完之后是否自动关闭浏览器,默认为true
- loop:事件循环对象
禁用提示条
browser = await launch(args=['--disable-infobars'])
这样就能关闭Chrome的Chrom正受到自动测试软件的控制
但是这样并不能修改webdriver的属性
browser = await launch(args=['--disable-infobars'])
page = await browser.newPage()
await page.evaluateOnNewDocument("Object.defineProperty(navigator,"webdriver",{get:()=>undefined})") 这样就能隐藏webdriver的属性
页面大小设置
width = 100
height = 100
browser = await launch(args=['--disable-infobars',f"--window-size={width},{height}"]) ##这是修改页面大小的参数,这里用了format,方便page自定义
page = await browser.newPage()
await page.setViewport({'widht':width,"height":height})
await page.evaluateOnNewDocument("Object.defineProperty(navigator,"webdriver",{get:()=>undefined})") 这样就能隐藏webdriver的属性
无痕模式
咳咳,懂得都懂
width = 100
height = 100
browser = await launch(args=['--disable-infobars',f"--window-size={width},{height}"])
context = await browser.createIncognitoBrowserContext()
page = await browser.newPage()
await page.setViewport({'widht':width,"height":height})
await page.evaluateOnNewDocument("Object.defineProperty(navigator,"webdriver",{get:()=>undefined})") ##这样就能隐藏webdriver的属性
page对象
page
对象就是我们操作的浏览器选项卡,通过 newPage
方法创建
选择器
Pyppeteer
的选择器函数很有意思:
querySelector
返回匹配的第一个节点,J
和其等价,支持CSS
选择器querySelectorAll
返回匹配的所有节点.JJ
和其等价,支持CSS
选择器xpath
返回匹配的所有节点.Jx
和其等价,支持XPATH
querySelectorEval
对匹配的节点使用提供的js
脚本, 和Jeval
等价querySelectorAllEval
对匹配的节点使用提供的js
脚本, 和JJeval
等价
在使用选择器之前,建议调用对应的 waitFor
函数,防止对应节点没有出现.
对于 CSS
选择器,函数为:waitForSelector()
对于 XPATH
选择器,函数为:waitForXPath()
选项卡操作
使用 newPage
就能新建一个选项卡,接下来介绍如何对这些选项卡操作.
pages
: 该方法可以得到所有打开的选项卡,可以以类似数组的方法进行访问bringToFront
: 选中这个选项卡goBack
: 回退goForward
:前进reload
:刷新pdf
:保存为pdfscreenshot
:截屏setContent
:截图setContext
:设置网页HTML
setUserAgent
:设置User-Agent
setExtraHTTPHeaders
: 设置Headers
close
:关闭
点击
click(selector,options={})
selector
输入节点的 css
选择器, options
是一个字典参数,如下:
options = {
button:"", ##鼠标按钮,取值为 left, middle, right
clickCount:"", ##点击次数
delay:"" ##点击延迟
}
输入文本
type(selector,input)
获取信息
获取源代码通过:content()
获取 cookie
通过:cookies(
执行 js
通过 evaluate
方法执行 js
脚本.
也可使用之前选择器一节提供的选择器执行 js
.
延时等待
WaitFor
: 通用等待方法waitForFunction
: 等待某个JS
方法执行完毕或返回结果waitForNavigation
: 等待页面跳转WaitForRequest
: 等待请求发出WaitForResponse
: 等待响应WaitForXPath
: 等待XPath
选择器WaitForSelector
: 等待选择器