pyppeteer的使用
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的使用的更多相关文章
- pyppeteer(python版puppeteer)基本使用
一.前言 以前使用selenium的无头浏览器,自从phantomjs2016后慢慢不更新了之后,selenium也开始找下家,这时候谷歌的chrome率先搞出来无头浏览器并开放了各种api,随后fi ...
- pyppeteer 报错-无法连接到浏览器
问题 程序报错: Failed to connect to browser port: http://127.0.0.1:57899/json/version 原因 虽然pyppeteer在首次启动时 ...
- pyppeteer爬虫例子
如果在centos上使用,需要安装下面的依赖 yum install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x8 ...
- pyppeteer使用笔记
pyppeteer -- python版本的puppeteer,一个强大的chronium headless浏览器API 最近搞天猫用了一波儿,记录一下. 先上文档: https://miyakogi ...
- pyppeteer初尝滋味
最近在爬几个电商平台网站用的selenium一登录就会有验证,目前这些网站对selenium检测很严格 因为不少大网站有对selenium的js监测机制.比如navigator.webdriver,n ...
- 网络爬虫之使用pyppeteer替代selenium完美绕过webdriver检测
1引言 曾经使用模拟浏览器操作(selenium + webdriver)来写爬虫,但是稍微有点反爬的网站都会对selenium和webdriver进行识别,网站只需要在前端js添加一下判断脚本,很容 ...
- Pyppeteer
pyppeteer模块的基本使用 引言 Selenium 在被使用的时候有个麻烦事,就是环境的相关配置,得安装好相关浏览器,比如 Chrome.Firefox 等等,然后还要到官方网站去下载对应的驱动 ...
- pyppeteer进阶技巧
记录一下在使用pyppeteer过程中慢慢发现的一些稍微高级一点的用法. 一.拦截器简单用法 拦截器作用于单个Page,即浏览器中的一个标签页.每初始化一个Page都要添加一下拦截器.拦截器实际上是 ...
- 爬虫的新模块pyppeteer的使用
安装 python3 -m pip install pyppeteer 最好是py3.5+ 手动安装 你懂的,天朝网络环境很复杂,如果要用pyppeteer自己绑定的chromium,半天都下载不下来 ...
随机推荐
- java中System.out.println()打印输出结果
疑点:syso()是打印输出语句,打印的是什么? syso()不同情况下打印输出的结果不一样: 1. package com.briup; public class Syso { public sta ...
- WPF 打开网页
1.利用浏览器打开using System.Diagnostics; Process proc = new System.Diagnostics.Process(); proc.StartInfo.F ...
- Unity经典游戏教程之:雪人兄弟
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...
- 简洁明了的Noip考场策略 / 平时做题也适用
1.选择策略: 评估的标准得分的难度不是AC的难度 2.思考问题: 怀疑的眼光审视自己 3.写代码前: 想想可不可以换一种代码实现会好写很多 把自己的思路再理一遍,可以写到纸上,记下来大致关键顺序 4 ...
- RabbitMQ的基本介绍及与Spring整合
一,场景回顾 最近做电商购物项目,在分布式中搜索服务,商品详情服务都是独立的模块.那么有一个问题就是: 商品的原始数据保存在数据库中,增删改查都在数据库中完成. 搜索服务数据来源是索引库,如果数据 ...
- Linux与Unix到底有什么不同?
来自:开源中国 原文:Linux vs. Unix: What's the difference? 链接: https://opensource.com/article/18/5/difference ...
- ElasticSearch实战系列一: ElasticSearch集群+Kinaba安装教程
前言 本文主要介绍的是ElasticSearch集群和kinaba的安装教程. ElasticSearch介绍 ElasticSearch是一个基于Lucene的搜索服务器,其实就是对Lucene进行 ...
- 二阶段js 入门知识点 自我总结复习
二阶段自我总复习 1.javascript基础 : 客户端 安全性 跨平台 脚本语言 三大结构: 顺序 .选择.循环 顺序:运算符和表达式 ...
- .NET Core 小程序开发零基础系列(1)——开发者启用并牵手成功
最近几个月本人与团队一直与小程序打交道,对小程序的实战开发算比较熟悉,也因一些朋友经常问我各种小程序问题,无不能一一回答,想了很久,决定还是空余时间来写写文章吧,偶尔发现一个人安静的时候写文章特爽 ...
- 变量、常量、input、if语句
Chapter2 Python基础 2.1 变量命名规则 字母.数字.下划线组成 不能数字开头 不能使用python中的关键字 变量名具有意义 推荐驼峰(ArvinGood).或者下划线方式 (arv ...