当前位置: 代码迷 >> 综合 >> 【2019.06.19】Python3 + Puppeteer Api介绍及调用实例、定位(百度首页,今日头条)
  详细解决方案

【2019.06.19】Python3 + Puppeteer Api介绍及调用实例、定位(百度首页,今日头条)

热度:31   发布时间:2023-12-22 22:41:41.0

demo

from pyppeteer import launchasync def main():browser = await launch(headless = False)   # headless = False,默认ture,为无头模式page = await browser.newPage()await page.goto('https://www.baidu.com')await page.screenshot({
    'path': 'example.png'})await browser.close()asyncio.run(main())
--------------------- 
作者:耳森Paulson 
来源:CSDN 
原文:https://blog.csdn.net/qq_38534107/article/details/92833863 
版权声明:本文为博主原创文章,转载请附上博文链接!

开启浏览器

  • await launch()
    方法定义pyppeteer.launcher.launch(options: dict = None, **kwargs) → pyppeteer.browser.Browser\
    可以看到它处于 launcher 模块中,参数没有在声明中特别指定,返回类型是 browser 模块中的 Browser 对象,另外观察源码发现这是一个 async 修饰的方法,所以调用它的时候需要使用 await。
  • 参数说明
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): 时间循环对象。

加载cookie

  • 在启动的时候设置 userDataDir
import asyncio
from pyppeteer import launchasync def main():browser = await launch(headless=False, userDataDir='./userdata', args=['--disable-infobars'])page = await browser.newPage()await page.goto('https://www.taobao.com')await asyncio.sleep(100)asyncio.get_event_loop().run_until_complete(main())

常用Api

  • page.goto 访问网页
  • page.screenshot 网页截图保存
  • page.pdf 网页导出 PDF 保存
  • page.evaluate 执行 JavaScript 并返回对应数据

实例

import asyncio
from pyppeteer import launchasync def main():browser = await launch()page = await browser.newPage()await page.goto('http://quotes.toscrape.com/js/')await page.screenshot(path='example.png')await page.pdf(path='example.pdf')dimensions = await page.evaluate('''() => {return {width: document.documentElement.clientWidth,height: document.documentElement.clientHeight,deviceScaleFactor: window.devicePixelRatio,}}''')print(dimensions)await browser.close()asyncio.run(main())

元素定位API

1 百度

  • page.goto 跳转URL
  • page.type()
  • page.click
import asyncio
from pyppeteer import launchasync def baidu_search(keyword):browser = await launch(headless=False)page = await browser.newPage()await page.goto('https://www.baidu.com/')await page.type('input#kw.s_ipt', keyword)await page.click('#su')await asyncio.sleep(100)await browser.close()if __name__ == '__main__':keyword = 'pyppeteer'asyncio.run(baidu_search(keyword))

2 今日头条

import asyncio
from pyppeteer import launchasync def main():# headless参数设为False,则变成有头模式browser = await launch(# headless=False)page = await browser.newPage()# 设置页面视图大小await page.setViewport(viewport={'width':1280, 'height':800})# 是否启用JS,enabled设为False,则无渲染效果await page.setJavaScriptEnabled(enabled=True)await page.goto('https://www.toutiao.com/')# 打印页面cookiesprint(await page.cookies())# 打印页面文本print(await page.content())# 打印当前页标题print(await page.title())# 抓取新闻标题title_elements = await page.xpath('//div[@class="title-box"]/a')for item in title_elements:# 获取文本title_str = await (await item.getProperty('textContent')).jsonValue()print(await item.getProperty('textContent'))# 获取链接title_link = await (await item.getProperty('href')).jsonValue()print(title_str)print(title_link)# 关闭浏览器await browser.close()asyncio.main(main())
  相关解决方案