Python爬虫之pyppeteer常用API快速上手

文档API Reference — Pyppeteer 0.0.25 documentation 

快速上手常用API总结:

# -*- coding:utf-8 -*-
import asyncio
import time

from pyppeteer.launcher import launch


async def main():

    c = {
       # 'userDataDir': './userdata',# 用户临时目录,保存cookie可以开启
       'args': [
           '--start-maximized',  # 最大化窗口
           # '--proxy-server=http://22.22.22.22:1111',#浏览器代理 配合某些中间人代理使用
           # '--load-extension={}'.format(chrome_extension),  # 加载插件
           # '--disable-extensions-except={}'.format(chrome_extension),
           # '--disable-extensions',
           '--hide-scrollbars',
           '--disable-bundled-ppapi-flash',
           '--mute-audio',
           '--no-sandbox',  # 取消沙盒模式 沙盒模式下权限太小
           '--no-sandbox',  # 不显示信息栏  比如 chrome正在受到自动测试软件的控制
           '--disable-setuid-sandbox',
           '--disable-gpu',
           '--disable-infobars'
           # log等级设置 在某些不是那么完整的系统里 如果使用默认的日志等级 可能会出现一大堆的warning信息
       ],
        'dumpio': True,  # 减少内存消耗
        'headless': False,
        'ignoreHTTPSErrors': True,
        'userDataDir': r'D:\temp'
       # "slowMo": 25  # 让执行慢下来
   }

    # 设置浏览器属性 --防检测的一些配置
    browser = await launch(c)

    # browser.newPage()在默认浏览器上下文中创建一个页面
    page = await browser.newPage()

    # 设置窗口大小
    await page.setViewport({'width': 2*1000, 'height': 2*600})
    # 设置请求头userAgent
    await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36')
    await page.evaluateOnNewDocument('() =>{ Object.defineProperties(navigator,''{ webdriver:{ get: () => false } }) }')  # 本页刷新后值不变

    # 设置额外的 HTTP 标头  headers ( Dict ) – 包含附加 http 标头的字典,每个请求都会发送。
    await page.setExtraHTTPHeaders({'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'})
    # 要导航到的页面的 URL
    await page.goto('http://www.baidu.com/')
    await asyncio.sleep(2)
    # 获取页面的完整 HTML 内容
    s = await page.content()
    # print(s)
    # 如果未指定 URL,则此方法返回当前页面 URL 的 cookie。如果指定了 URL,则仅返回这些 URL 的 cookie。
    cookie = await page.cookies()
    print(cookie)
    # 重新加载此页面
    await page.reload()
    # 截屏 screenshot(选项: dict = None , **kwargs ) → Union[bytes, str]
    """
    以下选项可用:
        path(str): 保存图像的文件路径。屏幕截图类型将从文件扩展名中推断出来。
        type(str): 指定截图类型,可以是jpeg或 png。默认为png.
        quality(int):图像的质量,在 0-100 之间。不适用于png图像。
        fullPage(bool):当为真时,截取整个可滚动页面的屏幕截图。默认为False.
        clip(dict): 指定页面剪切区域的对象。此选项应具有以下字段:
        x (int):剪辑区域左上角的 x 坐标。
        y (int):剪辑区域左上角的 y 坐标。
        width (int): 剪切区域的宽度。
        height (int): 剪切区域的高度。
        omitBackground (bool): 隐藏默认的白色背景,并允许捕获透明的屏幕截图。
        encoding(str):图像的编码,可以是 'base64'或'binary'。默认为'binary'.
    """
    await page.screenshot(path='66.jpg')
    # 设置cookie
    """
    cookies 应该是包含这些字段的字典:
        name(str):必需
        value(str):必需
        url (str)
        domain (str)
        path (str)
        expires (number): Unix 时间,以秒为单位
        httpOnly (布尔)
        secure (布尔)
        sameSite(str):'Strict'或'Lax'
    """
    await page.setCookie({'name': 'PSTM', 'value': '1641188299', 'domain': '.baidu.com'})
    # 更改默认的最大导航超时 setDefaultNavigationTimeout(超时:int )
    page.setDefaultNavigationTimeout(8)
    """
    此方法更改以下方法的默认超时 30 秒:
        goto()
        goBack()
        goForward()
        reload()
        waitForNavigation()

    """
    # 设置 JavaScript 启用/禁用。 协程setJavaScriptEnabled(启用: bool )默认True
    await page.setJavaScriptEnabled(True)
    # 获取此页面的 URL
    cr = page.url
    # 协程xpath(表达式:str )如果此页面中没有此类元素,则返回一个空列表
    elements = await page.xpath('//*[@id="hotsearch-content-wrapper"]/li')
    print(elements)

    for item in elements:
        e = await item.xpath('a')
        # print(e)
        # 获取文本
        print(await (await item.getProperty('textContent')).jsonValue())
        # 获取链接
        print(await (await e[0].getProperty('href')).jsonValue())

    # 输入字符串,第一个参数 selector选择器  ,第二个参数 字符串
    await page.type('#kw', "python")
    # 协程click( x: float , y: float ,选项: dict = None , **kwargs ) → None
    """
    协程click( x: float , y: float ,选项: dict = None , **kwargs ) → None
        单击 ( x, y)处的按钮。
        快捷方式move(),down()和up()。
        此方法接受以下选项:
        button(str): left, right, or middle, 默认为 left.
        clickCount (int): 默认为 1。
        delay(INT |浮动):时间之间的等待mousedown并 mouseup以毫秒为单位。默认为 0。
        协程down(选项:dict = None , **kwargs ) → None[来源]
        按下按钮(发送mousedown事件)。
        此方法接受以下选项:
        button(str): left, right, or middle, 默认为 left.
        clickCount (int): 默认为 1。
        协程move( x: float , y: float ,选项: dict = None , **kwargs ) → None
        移动鼠标光标(调度mousemove事件)。
        选项可以接受steps(int) 字段。如果steps指定了此选项,则发送中间mousemove事件。默认为 1。
        协程up(选项:dict = None , **kwargs ) → None[来源]
        释放按下的按钮(调度mouseup事件)。
        此方法接受以下选项:
        button(str): left, right, or middle, 默认为 left.
        clickCount (int): 默认为 1。
    """
    await page.click('#su', clickCount=2)
    time.sleep(5)
    # 浏览器向下滚动800个像素
    await page.evaluate('window.scrollBy(200,800)')
    time.sleep(5)
    # 滚动到浏览器底部
    await page.evaluate('window.scrollBy(0, document.body.scrollHeight)')
    time.sleep(5)
    # 使用js滚动到某个元素
    await page.evaluate('document.querySelector("#tsn_inner").scrollIntoView();')
    time.sleep(5)
    # 浏览器上下文的目标都将被关闭
    await browser.close()



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



  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值