记一次pyppeteer的使用

记一次pyppeteer的使用

下载文本中的网页源码,由于需要向下拉动滚动条所以使用pyppeteer渲染网页,并执行js代码,可是发现开启无界面的时候似乎执行不了js代码,还有异步的时候好像也执行不了js代码

import asyncio
from pyppeteer import launch
import re, os,time


async def create_page():
    browser = await launch(headless=True, dumpio=True)
    return browser


async def close_page(browser):
    await browser.close()


async def start(sem, url):
    # print(url)
    async with sem: #控制协程的并发量
        page = await browser.newPage()
        await page.goto(url)
        # for i in range(10): # 执行js代码向下滚动滚动条
        #     dimensions = await page.evaluate(f'var q=document.documentElement.scrollTop={i * 1000}')
        #     await asyncio.sleep(1)
        # sn = re.search('sn=(.*?)&', url).group(1)
        # with open(os.path.join(r'E:\study\out', f'{sn}.html'), 'ab') as f:
        #     data = await page.content()
        #     f.write(data.encode('utf8'))
        print(await page.content())
        await page.close()


if __name__ == '__main__':
    sem = asyncio.Semaphore(5)
    fundlist = []
    path = r'C:\Users\Admin\Desktop\新建 文本文档.txt'
    loop = asyncio.get_event_loop() 
    browser = loop.run_until_complete(create_page()) #创建一个浏览器对象
    for line in open(path, 'r'):
        fundlist.append(line)
    task = [loop.create_task(start(sem, url)) for url in fundlist]
    loop.run_until_complete(asyncio.wait(task))
    loop.run_until_complete(close_page(browser))

使用pyppeteer时有个bug会报错,将源码改动下就ok
链接: 这里.

launch_kwargs = {
        # 控制是否为无头模式
        "headless": False,
        # chrome启动命令行参数
        "args": [
            # 浏览器代理 配合某些中间人代理使用
            "--proxy-server=http://127.0.0.1:8008",
            # 最大化窗口
            "--start-maximized",
            # 取消沙盒模式 沙盒模式下权限太小
            "--no-sandbox",
            # 不显示信息栏  比如 chrome正在受到自动测试软件的控制 ...
            "--disable-infobars",
            # log等级设置 在某些不是那么完整的系统里 如果使用默认的日志等级 可能会出现一大堆的warning信息
            "--log-level=3",
            # 设置UA
            "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
        ],
       	"dumpio":True,
       	# 当界面开多了时会卡住,设置这个参数就不会了
        # 用户数据保存目录 这个最好也自己指定一个目录
        # 如果不指定的话,chrome会自动新建一个临时目录使用,在浏览器退出的时候会自动删除临时目录
        # 在删除的时候可能会删除失败(不知道为什么会出现权限问题,我用的windows) 导致浏览器退出失败
        # 然后chrome进程就会一直没有退出 CPU就会狂飙到99%
        "userDataDir": "",
    }

设置viewport 自动获取当前屏幕大小并设置viewport

# coding:utf8
import asyncio
from pyppeteer import launch


def screen_size():
    """使用tkinter获取屏幕大小"""
    import tkinter
    tk = tkinter.Tk()
    width = tk.winfo_screenwidth()
    height = tk.winfo_screenheight()
    tk.quit()
    return width, height


async def main():
    launch_kwargs = {
        "headless": False
    }
    # 启动浏览器
    browser = await launch(launch_kwargs)
    # 打开标签页
    page = await browser.newPage()
    # 默认 800 * 600 一般是不够的
    print(page.viewport)
    #
    width, height = screen_size()
    # 设置网页可视区域大小
    await page.setViewport({
        "width": width,
        "height": height
    })
    await browser.close()
    return


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

导出或加载cookie


    # 取出cookie
    cookies = await page.cookies()
    # 这里可以做些什么 :)
    pass
    # 然后导入cookie
    await page.setCookie(*cookies)

你可能感兴趣的:(python)