pyppeteer实践一--大鱼号模拟登陆
安装与环境配置就不多说了。
网上有很多淘宝的模拟登陆,大鱼号的跟淘宝差不多,我看好像是用的阿里的API,只不过实现方法略微有些不同。
直接用selenium和pyppeteer打开时无法拖动滑块成功的,会一直失败,原因是有webdriver特征值检测;

之前面试的时候做个这个,用的不是pyppeteer,用了其他两种方案。
第一种是使用ie浏览器或者一些老版本的火狐,也是可以实现的,但是得试来试去,说不定哪天就被加入到限制列表里了。
第二种使用mitmproxy在响应返回到浏览器之前修改上面那个函数或者在html头部插入一个js脚本,执行修改webdriver值即可,要开启很多服务,略微有些麻烦。
工作后做了淘宝的模拟登陆,直接借鉴了网上的pyppeteer的方式,就想试试之前的大鱼号。
遇到一个坑点,就是在打开页面时异步执行修改webdriver值后依然无法滑动成功,联想的就是是不是因为js实在iframe外部执行的,因为无法跨域,所以不影响内部,所以就在iframe内部又执行了一次js,果然可以滑动成功了,算是歪打误着。代码如下
# -*- encoding:utf-8 -*-
import asyncio
import random
from pyppeteer.launcher import launchwebdriver_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") # 页面加载成功的xpathcookies = await page.cookies()return cookiesif __name__ == '__main__':loop = asyncio.get_event_loop()result = loop.run_until_complete(dayu_login("xxxxx","xxxxx"))print(result)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
