pyperteer是Puppeteer的非官方Python支持,Puppeteer是一个无头JavaScript的基于Chrome/Chromium浏览器自动化库,可以用于对渲染网页的抓取。相比于selenium具有异步加载、速度快、具备有界面/无界面模式、伪装性更强不易被识别为机器人同时可以伪装手机平板等终端;但是也有一些缺点,如接口不易理解、语义晦涩,18年开始已经不更新,chromium原有的一些bug,继承了下来;
优点:免安装chrome。(不象selenium需要下载chrome,需要配置环境变量,selenium跟chrome版本还要对应),第一次使用时,会自动下载安装chromium(chromium相当于chrome的开发版本)
可直接抓取JavaScript渲染结果
官方安例
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())
流程解析
async 声明一个异步操作。
await 声明一个耗时操作。
asyncio.get_event_loop().run_until_complete(main()) 创建异步池并执行main函数。
browser = await launch() 创建浏览器对象,可以传入 字典形式参数
page = await browser.newPage() 创建一个页面对象, 页面操作在该对象上执行
await page.goto('http://example.com') 页面跳转
await page.screenshot({'path': 'example.png'}) 截图保存
await browser.close() 关闭浏览器对象
# 例子
import asyncio
from pyppeteer import launch
async def main():
#启动浏览器,headless默认为True,即无界面
bowser = await launch({'headless':False,'dummpio':True,'autoClose':False,'args':['--no-sandbox','--window-size=1366,850']})
#打开一个新浏览器
page = await bowser.newPage()
#设置浏览器大小
await page.setViewport({'width':1366,'height':768})
#浏览器输入访问地址
await page.goto('https://xn--l6qx3l1p4e.com/auth/login')
#调用asyncio,等待5秒
await asyncio.sleep(5)
#在输入框中输入用户名跟密码
await page.type('input#email.form-control','邮箱')
await page.type('input#password.form-control','密码')
#点击登陆
await page.click('button.btn.btn-primary.btn-lg.btn-icon.icon-right.login')
await asyncio.sleep(5)
page_text = await page.content()
print(page_text)
#关闭浏览器
#await page.click()
asyncio.get_event_loop().run_until_complete(main())
pyppeteer使用遇到的bug及解决方法
pyppeteer常用方法手册
python爬虫神器 Pyppeteer使用方法解析