官方文档

https://miyakogi.github.io/pyppeteer/reference.html#mouse-class

启动pyppteer

import asyncio
from pyppeteer import launch async def main():
# headless参数设为False,则变成有头模式
browser = await launch(
{'headless': False}
) # 打开一个页面
page = await browser.newPage() # 超时间见 10000 毫秒
res = await page.goto('https://www.cnblogs.com/guyouyin123/p/12690418.html', options={'timeout': 10000})
# 等待
await asyncio.sleep(2) print(await page.content()) # 返回html代码
resp_headers = res.headers # 响应头
resp_status = res.status # 响应状态 # 程序启动入口
asyncio.get_event_loop().run_until_complete(main())

切图

# 设置页面视图大小
await page.setViewport(viewport={'width': 1280, 'height': 800})
# 是否启用JS,enabled设为False,则无渲染效果
await page.setJavaScriptEnabled(enabled=True)
# 超时间见 10000 毫秒
res = await page.goto('https://www.cnblogs.com/guyouyin123/p/12690418.html', options={'timeout': 10000})
# 等待
await asyncio.sleep(2) # 截图 保存图片
await page.screenshot({'path': 'cnblog.png'})

获取响应头,响应头状态,cookies

async def main():
# headless参数设为False,则变成有头模式
browser = await launch(
{'headless': False}
)
# 打开一个页面
page = await browser.newPage() # 超时间见 10000 毫秒
res = await page.goto('https://www.cnblogs.com/guyouyin123/p/12690418.html', options={'timeout': 10000})
# 等待
await asyncio.sleep(2)
resp_headers = res.headers # 响应头
resp_status = res.status # 响应状态
cookies = page.cookies() print(resp_headers)
print(resp_status)
print(page.cookies()) # 程序启动入口
asyncio.get_event_loop().run_until_complete(main())

获取当前页面标题

print(await page.title())

获取页面html

import asyncio
from pyppeteer import launch async def main():
# headless参数设为False,则变成有头模式
browser = await launch(
{'headless': False}
)
# 打开一个页面
page = await browser.newPage()
# 是否启用JS,enabled设为False,则无渲染效果
await page.setJavaScriptEnabled(enabled=True) # 超时间见 10000 毫秒
res = await page.goto('https://www.cnblogs.com/guyouyin123/p/12690418.html', options={'timeout': 10000})
# 等待
await asyncio.sleep(2) print(await page.content()) # 返回html代码

第一种:获取整个页面html

 res = await page.goto('https://www.cnblogs.com/guyouyin123/p/12690418.html', options={'timeout': 10000})
# 等待
await asyncio.sleep(2) print(await page.content()) # 返回html代码

第二种:只获取文本

res = await page.goto('https://www.cnblogs.com/guyouyin123/p/12690418.html', options={'timeout': 10000})
# 等待
await asyncio.sleep(2)
content = await page.evaluate(pageFunction='document.body.textContent', force_expr=True)
print(content)

注入JS,控制上下滚动

res = await page.goto('https://www.cnblogs.com/guyouyin123/p/12690418.html', options={'timeout': 10000})
# 等待
await asyncio.sleep(2)
# 滑到底部
await page.evaluate('window.scrollBy(0, document.body.scrollHeight)') # js
window.scrollTo(0,100) # 向下滑动100
window.scrollTo(0,500) # 向下滑动500
window.scrollTo(0,document.body.scrollHeight) # 滑到底部
window.scrollTo(0,document.body.scrollHeight-500) # 滑到-500

选择器

Page.querySelector()  # CSS选择器
Page.querySelectorAll() # CSS选择器选所有
Page.xpath() # xpath选择器 # 简写方式为:
Page.J(), Page.JJ(), and Page.Jx()

获取元素内部的文本、属性

res = await page.goto('https://www.cnblogs.com/guyouyin123/p/12690418.html', options={'timeout': 10000})
# 等待
await asyncio.sleep(2) await page.evaluate('window.scrollBy(0, document.body.scrollHeight)') # 方式一:获取h1标签内容--执行JS方式
element = await page.querySelector('h1')
title = await page.evaluate('(element) => element.textContent', element) # 方式二:获取文本
element = await page.querySelector('h1')
title = await (await item.getProperty('textContent')).jsonValue() # 方式三:获取属性src,href
element = await page.querySelector('h1')
title_link = await (await item.getProperty('href')).jsonValue()

get_html

async def get_html(url):
browser = await pyppeteer.launch(headless=True, args=['--no-sandbox'])
page = await browser.newPage()
res = await page.goto(url, options={'timeout': 3000})
data = await page.content()
title = await page.title()
resp_cookies = await page.cookies() # cookie
resp_headers = res.headers # 响应头
resp_status = res.status # 响应状态
print(data)
print(title)
print(resp_headers)
print(resp_status)
return xxx

模拟输入,鼠标点击

# 模拟输入 账号密码  {'delay': rand_int()} 为输入时间
await page.type('#fm-login-id', "用户名")
await page.type('#fm-login-password', "密码", ) await page.waitFor(1000) # 等待时间
await page.click("#J_SubmitStatic") # 点击

taobao登录

import asyncio
from pyppeteer import launch async def main():
# headless参数设为False,则变成有头模式
browser = await launch(
{'headless': False}
)
# 打开一个页面
page = await browser.newPage()
await page.setViewport(viewport={'width': 1280, 'height': 800}) res = await page.goto('https://login.taobao.com/', options={'timeout': 10000})
await page.type('#fm-login-id', "123456")
await page.type('#fm-login-password', "aaa", )
await page.waitFor(1000) # 等待时间 slider = await page.querySelector('#nc_1_n1z') # 是否有滑块
if slider:
try:
print('有滑块')
await page.hover('#nc_1_n1z') # 不同场景的验证码模块能名字不同。
await page.mouse.down()
await page.mouse.move(2000, 0, {'delay': random.randint(1000, 2000)})
await page.mouse.up()
except Exception as e:
print(e)
input('验证失败,人工登录:')
else:
print('没有滑块')
input() await page.click("#login-form > div.fm-btn > button") # 点击登录
# 程序启动入口
asyncio.get_event_loop().run_until_complete(main())

taobao修改检测浏览器

await page.evaluate(
'''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }''') # 以下为插入中间js,将淘宝会为了检测浏览器而调用的js修改其结果。
await page.evaluate('''() =>{ window.navigator.chrome = { runtime: {}, }; }''')
await page.evaluate('''() =>{ Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'] }); }''')
await page.evaluate('''() =>{ Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3, 4, 5,6], }); }''') # 使用type选定页面元素,并修改其数值,用于输入账号密码,修改的速度仿人类操作,因为有个输入速度的检测机制
# 因为 pyppeteer 框架需要转换为js操作,而js和python的类型定义不同,所以写法与参数要用字典,类型导入
await page.type('.J_UserName', username, {'delay': input_time_random() - 50})
await page.type('#J_StandardPwd input', pwd, {'delay': input_time_random()})
# await page.screenshot({'path': './headless-test-result.png'}) # 截图测试 def input_time_random():
return random.randint(100, 151)

鼠标事件

.click()  # 点击按钮
.down() # 按下按钮
.up() # 释放按钮
.move() # 移动光标

键盘事件

您可以使用down(),up()和 sendCharacter()手动触发事件,就好像事件是由真实键盘生成的一样。

await page.keyboard.press('ArrowLeft')

await page.keyboard.down('Shift')
for i in ' World':
await page.keyboard.press('ArrowLeft')
await page.keyboard.up('Shift') await page.keyboard.press('Backspace')
# Result text will end up saying 'Hello!'.

按下键盘A:

await page.keyboard.down('Shift')
await page.keyboard.press('KeyA')
await page.keyboard.press('Enter')
await page.keyboard.up('Shift') 注意
修饰键确实会影响down()。按住shift 将以大写形式键入文本。 参数:
key(str)–要按键的名称,例如ArrowLeft。
options(dict)–选项可以具有text字段,如果指定了此选项,则使用此文本生成输入事件。

使用ip代理ua

import asyncio
from pyppeteer import launch async def register():
browser = await launch({
'headless': False,
# 代理ip
'args': ['--proxy-server=47.105.111.124:15525', ]
})
page = await browser.newPage()
await page.setUserAgent(
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36') asyncio.get_event_loop().run_until_complete(register()) # 更多参数
args: [
'--disable-setuid-sandbox',
'--no-sandbox',
'--proxy-server=10.24.51.125:8411',
'--ignore-certificate-errors',
'--window-size=375,812',
'--remote-debugging-port=9222'
],

pyppteer下的更多相关文章

  1. C++程序结构---1

    C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...

  2. Android SwipeRefreshLayout 下拉刷新——Hi_博客 Android App 开发笔记

    以前写下拉刷新 感觉好费劲,要判断ListView是否滚到顶部,还要加载头布局,还要控制 头布局的状态,等等一大堆.感觉麻烦死了.今天学习了SwipeRefreshLayout 的用法,来分享一下,有 ...

  3. IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法

    直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...

  4. Ubuntu下使用nvm

    写在前面:刚写着写着博客就跨年了,希望新的一年大家万事如意,一切向"前"看! 安装 wget -qO- https://raw.githubusercontent.com/crea ...

  5. Cmder--Windows下命令行利器

    cmder cmder是一个增强型命令行工具,不仅可以使用windows下的所有命令,更爽的是可以使用linux的命令,shell命令. 安装包 安装包链接 下载后,直接解压即用. 修改命令提示符λ为 ...

  6. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  7. GreenDao 数据库:使用Raw文件夹下的数据库文件以及数据库升级

    一.使用Raw文件夹下的数据库文件 在使用GreenDao框架时,数据库和数据表都是根据生成的框架代码来自动创建的,从生成的DaoMaster中的OpenHelper类可以看出: public sta ...

  8. [APUE]UNIX进程的环境(下)

    一.共享库 共享库使得可执行文件中不再需要包含常用的库函数,而只需在所有进程都可存取的存储区中保存这种库例程的一个副本.程序第一次执行的时候或第一次调用某个库函数的时候,用动态链接方法将程序与共享库函 ...

  9. ASP.NET Aries 入门开发教程4:查询区的下拉配置

    背景: 今天去深圳溜达了一天,刚回来,看到首页都是微软大法好,看来离.NET的春天就差3个月了~~ 回到正题,这篇的教程讲解下拉配置. 查询区的下拉配置: 1:查询框怎么配置成下拉? 在配置表头:格式 ...

随机推荐

  1. redis管道操作(事务),无回滚

    管道:将数据操作放在内存中,只有成功后,才会一次性全部放入redis #管道(事务),要是都成功则成功,失败一个全部失败 #原理:将数据操作放在内存中,只有成功后,才会一次性全部放入redis pip ...

  2. XSS语义分析的阶段性总结(二)

    本文首发于“合天智汇”微信公众号,作者:Kale 前言 上次分享了javascript语义分析,并且简单介绍了新型xss扫描器的一些想法,如何在不进行大量fuzz的情况下又能准确的检测出xss漏洞,这 ...

  3. nginx history路由模式时,页面返回404重定向index.html

    1.路由默认是带#的,有时我们感觉不美观,就使其变为history模式,也就没有#字符 2.# 如果找不到当前页面(404),就返回index.html,重新分配路由 location ^~/prod ...

  4. ajax---post跨域思路

    ajax跨域需要加的代码 header("Access-Control-Allow-Methods:GET,POST");

  5. 二, 连接Oracle 二

    一,sqlplus操作 文件操作命令 1.start和@ 说明: 运行sql脚本 案例: sql>@ home/a.sql或是sql>start home/a.sql 2.edit 说明: ...

  6. JAVA企业级应用TOMCAT实战(二)

    使用普通用户运行 使用普通用户来部署服务是比较安全的做法 [root@tomcat application]# useradd -u tomcat [root@tomcat application]# ...

  7. java中ThreadPool的介绍和使用

    文章目录 Thread Pool简介 Executors, Executor 和 ExecutorService ThreadPoolExecutor ScheduledThreadPoolExecu ...

  8. HTML JavaScript 基础(下)

    一.JavaScript 函数 1.普通函数-有函数名 function func(){ } 2.匿名函数-无函数名 setInterval(function(){ console.log(123); ...

  9. java 接口实现关系下的多态

    2019独角兽企业重金招聘Python工程师标准>>> 多态: 父类的引用类型变量指向了子类的对象 或者 是接口类型的引用类型变量指向了接口实现类的对象. 实现关系下的多态:    ...

  10. python 多进程处理 multiprocessing模块

    前提: 有时候一个用一个进程处理一个列表中的每个元素(每个元素要传递到一个函数中进行处理),这个时候就要用多进程处理 1 现场案例: 我有一个[ip1,ip2,ip3,.......]这样的列表,我要 ...