一.什么是pyppeteer?
pyppeteer是一个web自动化测试工具,由chromium浏览器和asyncio框架两个部分组成,它与selenium相比,虽然支持的浏览器相对比较单一,但是在运行效率和安装的过程都要比selenuim高,而且能防止被一些高级网址检测到。
二.安装pyppeteer
pip install pyppeteer
安装完pyppeteer库后还需要安装chromium浏览器,可以通过以下命令进行安装,即使不安装也没事,在第一次运行pyppeteer的时候会自动进行安装的。
pyppeteer-install
三.pyppeteer的使用
参考官方API文档进行使用:
API Reference — Pyppeteer 0.0.25 documentation
官网中用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'}) await browser.close() if __name__ == '__main__': asyncio.run(main())
如果要让浏览器显示可以在launch()中添加参数,Pyppeteer 接受选项的字典和关键字参数。如下:
#字典参数
browser = await launch( {'headless':False} )
#关键词参数
browser = await launch( headless=False )
如果要取消掉左上角的chrome正受自动测试软件的控制,可以添加以下参数
browser = await launch( { 'headless' : False , 'args' : [ '--disable-infobars' ] } )
打开的chromium的视口太小可以通过setViewPort()进行设置
设置视口。
可用的选项是:
width
(int): 以像素为单位的页面宽度。height
(int): 以像素为单位的页面高度。deviceScaleFactor
(浮动):默认为 1.0。isMobile
(bool): 默认为False
.hasTouch
(bool): 默认为False
.isLandscape
(bool): 默认为False
想让窗口直接最大化可以将--window-size替换成--start-maximized
width,height = 1900,1500
browser = await launch( { 'headless' : False , 'args' : [ f ' --window-size={ width },{ height } ' ] } )
await page.setViewport ( { 'width' : width , 'height' : height } )
防止被检查,大型网站都是通过用window.navigator.webdriver来进行检测的,使用JavaScript将它设置为false
await page.evaluate( ' ' ' ( ) =>{ Object.defineProperties ( navigator , { webdriver : { get : ( ) => false } } ) } ' ' ' )