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