pyppeteer的使用
安装
- 
属于第三方模块进行安装. pip install pyppeteer
- 
在Linux中,如果权限不够则加上. sudo pip install pyppeteer
使用
from pyppeteer import launch
import asyncio
async def main(timeout=30):# 设定时间超时, 默认是30秒
    # async 用来申明一个函数是一个异步函数
    browser = await launch(headless=True, args=["--no-sandbox"])
    # 参数说明:
    # headless 参数设为False,变为有头模式
    # Pyppeteer 支持字典和关键字传递参数
    page = await browser.newPage()
    
    # 设置页面大小
    await page.setViewport(viewport={"width":1280, "height":800})
    
    # 是否启用JS, enabled设为False,则无渲染效果
    await page.setJavaScriptEnabled(enabled=True)
    
    # 超时时间设置
    res = await page.goto(url=url, options={"timeout":1000})
    # 响应头
    resp_headers = res.headers
    # 响应状态
    resp_status = res.status
    
    # 等待
    await asynico.sleep(2)
    # 第二种方法
    while not await page.querySelector(".t"):
        pass
    
    # 滚动到页面底部
    await page.evaluate('windows.scrollBy(0,document.body.scrollHeight)')
    
    # 截图报存图片
    await page.screenshot({"path": "toutiao.png"}) 
    
    # 获取cookie
    print(await page.cookies())   
    
    # 打印页面文本信息
    print(await page.content())
    
    # 在页面上执行js脚本
    dimensions = await page.evaluate(pageFunction='''() => {
            return {
                width: document.documentElement.clientWidth,  // 页面宽度
                height: document.documentElement.clientHeight,  // 页面高度
                deviceScaleFactor: window.devicePixelRatio,  // 像素比 1.0000000149011612
            }
        }''', force_expr=False)  # force_expr=False  执行的是函数
    print(dimensions)
    #  只获取文本  执行 js 脚本  force_expr  为 True 则执行的是表达式
    content = await page.evaluate(pageFunction='document.body.textContent', force_expr=True)
    print(content)
    # 打印当前页标题
    print(await page.title())\
    
    # 抓取其他信息
    """
    1.选择器, Page.querySelector()
    2.选择器, Page.querySelectorAll()
    3.xpath表达式, Page.xpath()
    """
    # 使用querySelector()
    element = await page.querySelector(".feed-infinite-wrapper > ul>li") # 只抓取一个
    print(element)
    
    # 获取所有的文本信息, 执行js代码
    content = await page.querySelectorAll('(element) => element.textContent', element)
    print(content)
    
    # 使用xpath
    # elements = await page.xpath('//div[@class="title-box"]/a')
    # 使用选择器全选
    elements = await page.querySelectorAll(".title-box a") 
    for item in elements:
        print(await item.getProperty("textContent")) 
                     
                    
                 
                    
                