pyppeteer的使用

安装

  • 属于第三方模块进行安装. pip install pyppeteer

  • 在Linux中,如果权限不够则加上. sudo pip install pyppeteer

使用

使用今日头条作为demo

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"))
       # 获取文本信息
       title = await (await item.getProperty("textContent")).jsonValue()
       # 获取连接
       link = await (await item.getProperty("href")).jsonValue()
       print(title)  
       print(link)
   # 关闭浏览器
   await browser.close()  
  • 如何启动程序

  • 1.创建一个event_loop对象

       loop = asyncio.get_event_loop()
  • 2.启动运行

       loop.run_until_complete(main())

模拟键盘输入

# 模拟输入 账号密码  {'delay': rand_int()} 为输入时间
   await page.type('#TPL_username_1', "sadfasdfasdf")
   await page.type('#TPL_password_1', "123456789", )
   
   await page.waitFor(1000)
   await page.click("#J_SubmitStatic")
使用tkinter获取页面高度宽度
def screen_size():
   """使用tkinter获取屏幕大小"""
   import tkinter
   tk = tkinter.Tk()
   width = tk.winfo_screenwidth()
   height = tk.winfo_screenheight()
   tk.quit()
   return width, height
针对iframe操作
  • page.frames获取所有的iframe列表,需要判断操作的是哪一个iframe跟操作page一样

from pyppeteer import launch
import asyncio

async def main(url):
   w = await launch({"headless":False, "args":["--no-sandbox"]})
   page = await w.newPage()
   await page.setViewport({"width":1366, "height":800})
   await page.goto(url)
   try:
       await asyncio.sleep(1)
       frame = page.frames
       print(frame)
       
       title = await frame[1].title()
       print(title)
       
       await asyncio.sleep(1)
       login = await frame[1].querySelector('#switcher_plogin')
       print(login)
       
       await login.click()
       await asyncio.sleep(5)
   except Exception as e:
       print(e)
   for page in await w.pages():
       await page.close()
   await w.close()

asyncio.get_event_loop().run_until_complete(main("https://i.qq.com/?rd=1"))
# asyncio.get_event_loop().run_until_complete(main("https://www.gushici.com/"))

大部分借鉴与别人,目前觉得模拟器爬虫还是比较慢的,静待大家的创新。

pyppeteer的使用的更多相关文章

  1. pyppeteer(python版puppeteer)基本使用

    一.前言 以前使用selenium的无头浏览器,自从phantomjs2016后慢慢不更新了之后,selenium也开始找下家,这时候谷歌的chrome率先搞出来无头浏览器并开放了各种api,随后fi ...

  2. pyppeteer 报错-无法连接到浏览器

    问题 程序报错: Failed to connect to browser port: http://127.0.0.1:57899/json/version 原因 虽然pyppeteer在首次启动时 ...

  3. pyppeteer爬虫例子

    如果在centos上使用,需要安装下面的依赖 yum install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x8 ...

  4. pyppeteer使用笔记

    pyppeteer -- python版本的puppeteer,一个强大的chronium headless浏览器API 最近搞天猫用了一波儿,记录一下. 先上文档: https://miyakogi ...

  5. pyppeteer初尝滋味

    最近在爬几个电商平台网站用的selenium一登录就会有验证,目前这些网站对selenium检测很严格 因为不少大网站有对selenium的js监测机制.比如navigator.webdriver,n ...

  6. 网络爬虫之使用pyppeteer替代selenium完美绕过webdriver检测

    1引言 曾经使用模拟浏览器操作(selenium + webdriver)来写爬虫,但是稍微有点反爬的网站都会对selenium和webdriver进行识别,网站只需要在前端js添加一下判断脚本,很容 ...

  7. Pyppeteer

    pyppeteer模块的基本使用 引言 Selenium 在被使用的时候有个麻烦事,就是环境的相关配置,得安装好相关浏览器,比如 Chrome.Firefox 等等,然后还要到官方网站去下载对应的驱动 ...

  8. pyppeteer进阶技巧

    记录一下在使用pyppeteer过程中慢慢发现的一些稍微高级一点的用法. 一.拦截器简单用法 拦截器作用于单个Page,即浏览器中的一个标签页.每初始化一个Page都要添加一下拦截器.拦截器实际上是 ...

  9. 爬虫的新模块pyppeteer的使用

    安装 python3 -m pip install pyppeteer 最好是py3.5+ 手动安装 你懂的,天朝网络环境很复杂,如果要用pyppeteer自己绑定的chromium,半天都下载不下来 ...

随机推荐

  1. 以太坊RLPx传输协议

    本文主要内容翻译自:The RLPx Transport Protocol,其中添加了一些个人的理解,由于密码学水平有限,不正确之处望指正.另外原文可能已经更新,最新内容请直接阅读原文. 本文档定义了 ...

  2. 90后iOS开发者的出路,如何规划30岁前的自己(程序员必修课)

    前言: 最近发生了一些和我们没有直接关系但是有间接关系的事情.比如华为“清洗”高龄基层员工,比如游戏公司2号员工拿不到股份而离职.先不说事实到底如何,起码很多码农是心有戚戚焉. 最近一年多也发生了一些 ...

  3. Eclipse+CXF框架开发Web服务实战

    一. 说明 采用CXF框架开发webservice. 所用软件及版本如下.  操作系统:Window XP SP3.  JDK:JDK1.6.0_07,http://www.oracle.com/ ...

  4. 送礼物「JSOI 2015」RMQ+01分数规划

    [题目描述] 礼品店一共有N件礼物排成一列,每件礼物都有它的美观度.排在第\(i(1\leq i\leq N)\)个位置的礼物美观度为正整数\(A_I\).JYY决定选出其中连续的一段,即编号为礼物\ ...

  5. C# 发送邮件 并自定义邮件格式

    话不多说,直接上代码 //邮件提醒 string Body = @"Dear " + list.Rows[i]["people"] + ":<b ...

  6. EventEmitter的前端实现

    EventEmitter简介 EventEmitter是Node.js的内置模块events提供的一个类,它是Node事件流的核心,EventEmitter是服务端的东西, 前端已经有event-em ...

  7. 欢迎加入我的知识星球:C语言解惑课堂

    我在知识星球上开通了一个有关C语言基础答疑解惑的星球,它叫做:“C语言解惑课堂”.看这名字你就知道虽然有点俗,俗才贴近你的真正需求嘛!这是一个专门帮助C语言初学者答疑解惑的课堂.嗯~~~,关于这个星球 ...

  8. socket基于TCP(粘包现象和处理)

    目录 6socket套接字 7基于TCP协议的socket简单的网络通信 AF_UNIX AF_INET(应用最广泛的一个) 报错类型 单一 链接+循环通信 远程命令 9.tcp 实例:远程执行命令 ...

  9. 快速了解Python并发编程的工程实现(上)

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  10. 教你如何认识人脸识别开发套件中的双目摄像、3D结构光摄像头、单目摄像头的区别及详细讲解

    深圳市宁远电子提供的人脸识别模组可支持双目摄像头和3D结构光摄像头,在客户咨询中经常有被问到双目的为什么会比单目的成本高,区别在哪里,他们的适用于哪些场景呢?在此,深圳市宁远电子技术工程师就为大家详细 ...