嗨,大家好我又来了,在上一篇文章中我分享给大家一个万能反反selenium的方法-----pyautogui—>https://blog.csdn.net/qq_41927995/article/details/98626931。
如果有小伙伴对这种方法感觉很不习惯,ok!!!今天给大家分析一个本人很喜欢的库------pyppeteer 闪亮登场!!!!!!!!!!!
相信很多人对这个库可能感到很陌生,那我先给大家介绍一哈这个库:
1.先给大家介绍介绍这个库的来源吧。这个库是基于前端神器puppeteer的python版本,其实原理介绍调用Chrome DevTools开放的接口与Chrome通信。如果大家对puppeteer感兴趣可以取官方文档看看---->https://www.npmjs.com/package/puppeteer
2.当你对pyppeteer有了一定了解后你会发现它怎么和selenium和PhantomJs很像啊,
其实确实很像啊。Puppeteer(pyppeteer)是谷歌出品的一款基于Node.js开发的一款工具,主要是用来操纵Chrome浏览器的 API,通过Javascript代码来操纵Chrome浏览器,所以想学这个库一定一定要有一定的js基础啊(我就是js基础太差,学的我头疼啊。。。)
3.介绍了pyppeteer就不得不介绍它的两个核心:
chromium
它是谷歌发布的一款浏览器,是Chrome的提前版吧(有很多很多问题,又非常非常好玩,本人最近在研究这个浏览器等有机会给大家详细介绍这款浏览器)我们神器pyppeteer所依赖的浏览器就是它(放心不用你去找它的安装方法,安装方法下面会介绍)
asyncio
相信很多学过python的这个关键词应该不陌生吧,它就是大名鼎鼎的异步些程库,我们的神器pyppeteer是一改全程异步的(就是全程都是asyncio,我也不想啊可是没办法。。。。。哎。。。。)
想对这个asyncio有一定了解的可以去廖大大的博客看看------->https://www.liaoxuefeng.com/wiki/1016959663602400/1017970488768640
关于pyppeteer的一些基础介绍就到这里了。。。。。现在开始我们的正餐!!!!运用pyppeteer图片淘宝反爬,进行首页登录!!!
话不多说直接上代码(每行注释啊!!!!!!累死我了。。。。点个关注啊)
# -*- coding: UTF-8 -*-
import asyncio
from pyppeteer import launch
import time,random
width, height = 1366, 768#设置浏览器大小
username="#####"#账号
pwd="########"#密码
async def main():
browser = await launch(headless=False,args=[f'--window-size={width},{height}'])#类似chrom的设置
page = await browser.newPage()#打开浏览器
await page.setViewport({'width': width, 'height': height})#引用大小
await page.evaluateOnNewDocument("""
var _navigator={};
for (name in window.navigator) {
if (name !="webdriver"){
_navigator[name] = window.navigator[name]
}
}
Object.defineProperties(window,: 'navigator',{
get: () => _navigator,
})
""")#这是打开访问网页前注入的js
#类似于mitmpoxy中间人注入js
#https://login.taobao.com/member/login.jhtml?redirectURL=https://www.taobao.com/
await page.goto('https://login.taobao.com/member/login.jhtml?tpl_redirect_url=https%3A%2F%2Fwww.tmall.com&style=miniall&enup=true&newMini2=true&full_redirect=true&sub=true&from=tmall&allp=assets_css%3D3.0.10/login_pc.css')#访问天猫iframe的链接
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], }); }''')
await page.evaluate('''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }''') #运行程序中中可以回调的js
await page.evaluate('''document.getElementsByClassName("J_Quick2Static")[0].click()''')#点击页面的账号密码登录
time.sleep(1)
# await asyncio.sleep(100)
await page.type('.J_UserName', username, {'delay': input_time_random() - 50})#输入账号 设置输入时间
time.sleep(1)
await page.type('#J_StandardPwd input', pwd, {'delay': input_time_random()})#输入密码
#如果出现滑块
try:
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()
time.sleep(1)
await page.evaluate('''document.getElementById("J_SubmitStatic").click()''')#点击登录按钮
time.sleep(10000)
except:
#如果没有出现滑块
await page.evaluate('''document.getElementById("J_SubmitStatic").click()''')#点击登录按钮
time.sleep(1000)
def input_time_random():
return random.randint(100, 151)#生成随机时间
asyncio.get_event_loop().run_until_complete(main())#pyppeteer调用协程
是不是一眼望去代码都看不懂。。。。。。。没关系。其实很简单的(简单个屁。。。。。)
那我们今天的pyppeteer就介绍到这儿了
有任何问题可以加我 q:1374522338
留言看见也会解答!
下一篇:针对淘宝反selenium的反反爬措施详讲3-----mitmproxy