python使用pyppeteer相关使用

1、安装pyppeteer

pip install pyppeteer -i https://pypi.douban.com/simple

2、chromium下载地址

https://npm.taobao.org/mirrors/chromium-browser-snapshots/

3、来源于网络copy的

ignoreHTTPSErrors (bool): 是否要忽略 HTTPS 的错误,默认是 False。
headless (bool): 是否启用 Headless 模式,即无界面模式,如果 devtools 这个参数是 True 的话,那么该参数就会被设置为 False,否则为 True,即默认是开启无界面模式的。
executablePath (str): 可执行文件的路径,如果指定之后就不需要使用默认的 Chromium 了,可以指定为已有的 Chrome 或 Chromium。
slowMo (int|float): 通过传入指定的时间,可以减缓 Pyppeteer 的一些模拟操作。
args (List[str]): 在执行过程中可以传入的额外参数。
ignoreDefaultArgs (bool): 不使用 Pyppeteer 的默认参数,如果使用了这个参数,那么最好通过 args 参数来设定一些参数,否则可能会出现一些意想不到的问题。这个参数相对比较危险,慎用。
handleSIGINT (bool): 是否响应 SIGINT 信号,也就是可以使用 Ctrl + C 来终止浏览器程序,默认是 True。
handleSIGTERM (bool): 是否响应 SIGTERM 信号,一般是 kill 命令,默认是 True。
handleSIGHUP (bool): 是否响应 SIGHUP 信号,即挂起信号,比如终端退出操作,默认是 True。
dumpio (bool): 是否将 Pyppeteer 的输出内容传给 process.stdout 和 process.stderr 对象,默认是 False。
userDataDir (str): 即用户数据文件夹,即可以保留一些个性化配置和操作记录。
env (dict): 环境变量,可以通过字典形式传入。
devtools (bool): 是否为每一个页面自动开启调试工具,默认是 False。如果这个参数设置为 True,那么 headless 参数就会无效,会被强制设置为 False。
logLevel (int|str): 日志级别,默认和 root logger 对象的级别相同。
autoClose (bool): 当一些命令执行完之后,是否自动关闭浏览器,默认是 True。
loop (asyncio.AbstractEventLoop): 时间循环对象。

Dorm:

import asyncio
from time import sleep

import requests
from lxml import etree
from pyppeteer import launch

width, height = 2000, 1000


# 实例化浏览器对象(谷歌测试版)
async def main():
    browser = await launch(
        # 关闭无头浏览器 默认是无头启动的
        headless=False,
        args=['--disable-infobars',
              f'--window-size={width},{height}',
              ]
    )
    # 新建一个空白页
    page = await browser.newPage()
    await page.setViewport({'width': width, 'height': height})
    # 网址 URL
    await page.goto('http://www.szsqhot.com/forum.php?mod=forumdisplay&fid=2&filter=author&orderby=dateline&typeid=4')
    await page.evaluate('''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }''')
    # 获取page当前显示页面的源码数据
    page_text = await page.content()
    tree = etree.HTML(page_text)
    numbers = tree.xpath('//div[@id="pgt"]//div[@class="pg"]//a[@class="last"]//text()')[0].strip('... ')
    # print(numbers)
    for number in range(1, int(numbers) + 1):
        sleep(3)
        url = 'http://www.szsqhot.com/forum.php?mod=forumdisplay&fid=2&orderby=dateline&typeid=4&orderby=dateline&typeid=4&filter=author&page={}'.format(
            number)
        # print(url)
        parse(url)


def parse(url):
    response = requests.get(url=url)
    response.encoding = response.apparent_encoding
    tree = etree.HTML(response.text)
    sleep(2)
    table_list = tree.xpath('//table[@id="threadlisttableid"]//tbody[position()>1]')
    # print(table_list)
    for table_ in table_list:
        title = table_.xpath('.//th[@class="new ren_tzlb_twlb"]//a[@class="s xst"]//text()')[0]
        url = 'http://www.szsqhot.com/' + table_.xpath('.//th[@class="new ren_tzlb_twlb"]//a[@class="s xst"]//@href')[0]
        print(title)
        print(url)
        print('
')
        # sleep(3)
        # parse_detail(title, url)


asyncio.get_event_loop().run_until_complete(main())
 # https://blog.csdn.net/qq_38839677/article/details/89348658
原文地址:https://www.cnblogs.com/ZH-YC/p/14555517.html