pyppeteer的使用

安装

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

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

使用

使用今日头条作为demo

  1. 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对象

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

    1.   loop.run_until_complete(main())

模拟键盘输入

  1. # 模拟输入 账号密码 {'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获取页面高度宽度
  1. 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一样

  1. 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. scrapy框架与python爬虫

  2. 守望先锋app(2)

    上次的功能完成了英雄名字.id.头像的下载并使用RecyclerView展示, 所以接下来就是点击每个英雄的caraview就能打开下一个活动进行英雄的介绍.先打开暴雪的官网查看有那些技能.故事.图片 ...

  3. C#将图片转换成字符画

    先看一下效果图 在Main方法中调用(首先要添加程序集System.Drawing,然后引入命名空间System.Drawing) ConvertToChar(new Bitmap(@"D: ...

  4. 弹性盒子---CSS3布局方式

    1.弹性盒子/伸缩盒子 如果要使用弹性盒子属性,首先要将父级元素变成弹性盒子 Flex-direction 设置伸缩盒子的内部元素的排列方式 Row    从左到右安行排列 Column  从上到下按 ...

  5. keras 学习笔记:从头开始构建网络处理 mnist

    全文参考 < 基于 python 的深度学习实战> import numpy as np from keras.datasets import mnist from keras.model ...

  6. Django-channels 实现WebSocket实例

    引入 先安装三个模块 pip install channels pip install channels_redis pip install pywin32 创建一个Django项目和一个app 项目 ...

  7. [WPF自定义控件库] 给WPF一个HyperlinkButton

    1. 在WPF怎么在UI上添加超级链接 这篇文章的目的是介绍怎么在WPF里创建自定义的HyperlinkButton控件.很神奇的,WPF居然连HyperlinkButton都没有,不过它提供了另一种 ...

  8. Python day01 课堂笔记

    今天是第一天学习Python课程,主要从计算机基础,Python的历史,环境 ,变量,常量,注释,用户交互,基础数据类型 ,简单的if条件语句和while循环语句这几个来学习,重点的掌握内容是pyth ...

  9. Mybatis 中的<![CDATA[ ]]>浅析

    在使用mybatis 时我们sql是写在xml 映射文件中,如果写的sql中有一些特殊的字符的话,在解析xml文件的时候会被转义,但我们不希望他被转义,所以我们要使用<![CDATA[ ]]&g ...

  10. Linux环境搭建 | VMware下共享文件夹的实现

    在进行程序开发的过程中,我们经常要在主机与虚拟机之间传递文件,比如说,源代码位于虚拟机,而在主机下阅读或修改源代码,这里就需要使用到 「共享文件」 这个机制了.本文介绍了两种共享文件夹的实现机制:VM ...