pyppeteer实践一--大鱼号模拟登陆

安装与环境配置就不多说了。

网上有很多淘宝的模拟登陆,大鱼号的跟淘宝差不多,我看好像是用的阿里的API,只不过实现方法略微有些不同。

直接用selenium和pyppeteer打开时无法拖动滑块成功的,会一直失败,原因是有webdriver特征值检测;

pyppeteer实践一--大鱼号模拟登陆_第1张图片

之前面试的时候做个这个,用的不是pyppeteer,用了其他两种方案。

第一种是使用ie浏览器或者一些老版本的火狐,也是可以实现的,但是得试来试去,说不定哪天就被加入到限制列表里了。

第二种使用mitmproxy在响应返回到浏览器之前修改上面那个函数或者在html头部插入一个js脚本,执行修改webdriver值即可,要开启很多服务,略微有些麻烦。

工作后做了淘宝的模拟登陆,直接借鉴了网上的pyppeteer的方式,就想试试之前的大鱼号。

遇到一个坑点,就是在打开页面时异步执行修改webdriver值后依然无法滑动成功,联想的就是是不是因为js实在iframe外部执行的,因为无法跨域,所以不影响内部,所以就在iframe内部又执行了一次js,果然可以滑动成功了,算是歪打误着。代码如下

# -*- encoding:utf-8 -*-
import asyncio
import random
from pyppeteer.launcher import launch

webdriver_js = '''() =>{
           Object.defineProperties(navigator,{
             webdriver:{
               get: () => false
             }
           })
        }
'''

def input_random():
    return random.randint(100, 150)

async def dayu_login(username,password):
    browser = await launch(headless=True)
    pages = await browser.pages()
    page = pages[0]
    await page.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36")
    await page.evaluate(webdriver_js)
    await page.goto("https://mp.dayu.com/")
    await page.evaluate(webdriver_js)  # webdriver特征值修改
    iframe = page.frames[1]
    await iframe.evaluate(webdriver_js) # 可能原因是iframe外执行的修改浏览器特征无法应用到iframe内
    await iframe.type("#login_name",username,{"delay":input_random()})
    await iframe.type("#password",password,{"delay":input_random()})
    await iframe.hover("#nc_1_n1z")
    await page.mouse.down()
    await page.mouse.move(2000, 0,{'delay': input_random(),"steps":20})
    await page.mouse.up()
    await iframe.click("#submit_btn")
    await page.waitForXPath("/html/body/header/div[3]/div[2]/img") # 页面加载成功的xpath
    cookies = await page.cookies()
    return cookies



if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    result = loop.run_until_complete(dayu_login("xxxxx","xxxxx"))
    print(result)

 

你可能感兴趣的:(pyppeteer学习与实践,爬虫)