针对淘宝反selenium的反反爬措施详讲2-----pyppeteer

嗨,大家好我又来了,在上一篇文章中我分享给大家一个万能反反selenium的方法-----pyautogui—>https://blog.csdn.net/qq_41927995/article/details/98626931。
如果有小伙伴对这种方法感觉很不习惯,ok!!!今天给大家分析一个本人很喜欢的库------pyppeteer 闪亮登场!!!!!!!!!!!
相信很多人对这个库可能感到很陌生,那我先给大家介绍一哈这个库:

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

发布了6 篇原创文章 · 获赞 32 · 访问量 1535

猜你喜欢

转载自blog.csdn.net/qq_41927995/article/details/98745414