pyperteer是Puppeteer的非官方Python支持,Puppeteer是一个无头JavaScript的基于Chrome/Chromium浏览器自动化库,可以用于对渲染网页的抓取。相比于selenium具有异步加载、速度快、具备有界面/无界面模式、伪装性更强不易被识别为机器人同时可以伪装手机平板等终端;但是也有一些缺点,如接口不易理解、语义晦涩,18年开始已经不更新,chromium原有的一些bug,继承了下来;
  优点:免安装chrome。(不象selenium需要下载chrome,需要配置环境变量,selenium跟chrome版本还要对应),第一次使用时,会自动下载安装chromium(chromium相当于chrome的开发版本)

57617-10w2enlvala.png

  可直接抓取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使用方法解析

最后修改:2020 年 10 月 11 日
如果觉得我的文章对你有用,请随意赞赏