python自动登录灯塔党建_python 奇淫技巧之自动登录 哔哩哔哩
前言
嘿,各位小伙伴好呀,今天要带来点什么干货呢,就从我的实际开发中来给大家带来一个案例吧,如何自动登录 哔哩哔哩
接到老大通知,让我自动写一个自动登录 哔哩哔哩 的脚本,我当然是二话不说直接开怼,咱们的准则是啥,生死看淡,不服就干,干就完了,然而,现实总是被无情打脸,但是不管怎样,终究算是干过它了,下面我们来一一讲解,如何自动登录 哔哩哔哩
准备工作
chromedriver:浏览器驱动,可以理解为一个没有界面的chrome浏览器
selenium:用于模拟人对浏览器进行点击、输出、拖拽等操作,就相当于是个人在使用浏览器,也常常用来应付反爬虫措施
开始进行
哔哩哔哩登录URL:https://passport.bilibili.com/login
点击登录如下,自动登录blbl最难的一点就是,拖动滑块,对准缺口,正是这一个问题,让我掉了好几根头发,跟上我的脚步,能少踩一个一个坑是一个坑
可能看到这,稍微会点技术的小伙伴都知道,其实我们根本要解决的问题,就是缺口获取缺口的位置,但是要怎么获取这个缺口的位置呢
这尼玛,canvas是个啥,其实当时我和你们想法一样,其实呢,这个canvas是个画布,可不是图片,这咋办,这不是图片怎么办呢
再说,我怎么知道哪个是带缺口图的canvas,经过多次测试,终于算是弄清楚了哪个是背景图,哪个是滑块,我来给大家标注一下
So,问题又来了,我怎么获取这里面的图片呢,上图!!!
我们先在游览器前端控制台,通过js代码,选中带缺口的标签,因为是类选中,所以需要取0下标,通过 toDataURL("image/png") 方法,将canvas将里面的图片转为base64位图片,转成base64位图片有啥用呢,来,我们赋值这么这么长的一段base64地址,复制到游览器中
看到了没,我们梦寐已久带缺口的图片
下一步怎么办呢,当时我的想法是,如法炮制,获取滑块的的图片,通过opencv模板对比,获取缺口位置,事实证明,我又被打脸,我们来看一下滑块图片张啥样
是不是看着没什么问题,我们来保存本地试一下
看出来了没,其实除了滑块以外,其他位置为透明区域,如果有透明区域,是不能通过opencv 模板对比的,这咋办,如果在用opencv处理图像,就是个累活了
本着能懒就懒得原则,直接上第三方平台吧
本文使用的第三方平台 联众:https://www.jsdati.com/
这个平台还是比较贴心的,还有qq客服,有问题我们还可以问qq客服,暖心
图像类型ID 1318为滑块验证码,只需要把带有缺口的图片上传到此网站就好
各位小伙伴自行去联众注册哈,价格还挺香,1元100点,滑动验证码一个2点
具体怎么操作呢,说了这么多,我们也该上代码了
importbase64importrequestsfrom selenium importwebdriverfrom selenium.webdriver.support.wait importWebDriverWaitfrom selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.common.by importByfrom selenium.webdriver importActionChainsimporttimeimportrandom#联众打码平台账号密码
api_username = "username"api_password= "password"file_name= "bg.png"api_post_url= "http://v1-http-api.jsdama.com/api.php?mod=php&act=upload"yzm_min= "1"yzm_max= "1"yzm_type= "1318"tools_token= ""
#初始化
definit():#定义为全局变量,方便其他模块使用
globalurl, browser, username, password, wait#登录界面的url
url = 'https://passport.bilibili.com/login'
#实例化一个chrome浏览器
browser = webdriver.Chrome(r"G:\installPage\chromedriver_win32 _78.0.3904.70\chromedriver.exe")
browser.maximize_window()
time.sleep(2)#用户名
username = 'qweqwe'
#密码
password = 'asdfasdf'
#设置等待超时
wait = WebDriverWait(browser, 20)#登录
deflogin():#打开登录页面
browser.get(url)#获取用户名输入框
user = wait.until(EC.presence_of_element_located((By.ID, 'login-username')))#获取密码输入框
passwd = wait.until(EC.presence_of_element_located((By.ID, 'login-passwd')))#输入用户名
user.send_keys(username)#输入密码
passwd.send_keys(password)#获取登录按钮
login_btn = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'a.btn.btn-login')))#随机延时点击
time.sleep(random.random() * 5)
login_btn.click()
time.sleep(2)#下载 带缺口的背景图
defdownfile():#下面的js代码根据canvas文档说明而来
JS = 'return document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].toDataURL("image/png")'
#执行 JS 代码并拿到图片 base64 数据
im_info = browser.execute_script(JS) #执行js文件得到带图片信息的图片数据
im_base64 = im_info.split(',')[1] #拿到base64编码的图片信息
im_bytes = base64.b64decode(im_base64) #转为bytes类型
with open('bg.png', 'wb') as f: #保存图片到本地
f.write(im_bytes)#获取 缺口图片位置坐标
defget_geetest_postion():
headers={'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3','Accept-Encoding': 'gzip, deflate','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0','Connection': 'keep-alive','Host': 'v1-http-api.jsdama.com','Upgrade-Insecure-Requests': '1'}
files={'upload': (file_name, open(file_name, 'rb'), 'image/png')
}
data={'user_name': api_username,'user_pw': api_password,'yzm_minlen': yzm_min,'yzm_maxlen': yzm_max,'yzmtype_mark': yzm_type,'zztool_token': tools_token
}
s=requests.session()
r= s.post(api_post_url, headers=headers, data=data, files=files, verify=False)print(r.json(), type(r.json()))
postion= r.json().get("data").get("val") #type:str
x, y = postion.split(",")#print(x,y)
returnint(x)#构造滑动轨迹
defget_track(distance):
track=[]
current=0
mid= distance * 3 / 4t= 0.2v=0while current
a= 2
else:
a= -3v0=v
v= v0 + a *t
move= v0 * t + 1 / 2 * a * t *t
current+=move
track.append(round(move))returntrack#模拟拖动
defmove_to_gap(trace):#得到滑块标签
slider= wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div.geetest_slider_button')))
ActionChains(browser).click_and_hold(slider).perform()for x intrace:#使用move_by_offset()方法拖动滑块,perform()方法用于执行
ActionChains(browser).move_by_offset(xoffset=x, yoffset=0).perform()#模拟人类对准时间
time.sleep(0.1)#释放滑块
ActionChains(browser).pause(0.5).release().perform()#拖动滑块
defslide():
distance=get_geetest_postion()print('计算偏移量为:%s Px' %distance)#计算移动轨迹
trace = get_track(distance - 10)#移动滑块
move_to_gap(trace)if __name__ == '__main__':
init()
login()
downfile()
slide()
查看代码
效果展示
python自动登录灯塔党建_python 奇淫技巧之自动登录 哔哩哔哩相关推荐
- Python奇淫技巧之自动登录哔哩哔哩
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 昔我往矣,杨柳依依.今我来思,雨雪 ...
- 输入n个字符串字典序排序_30个Python奇淫技巧集
今天小编熬夜整理了一份,内容是基础篇覆盖了字符串,列表,字典和基础序列容器.不要小看青铜篇,这份资料里面收集了很多奇淫技巧,很多小编也是第一次遇到,非常值得收藏. 下面我挑选几个给大家看一下,小编觉得 ...
- 【Python奇淫技巧】用pandas的read_html函数仅一行代码实现网页爬虫
目录 一.介绍read_html()函数 二.分析爬取目标页面 三.代码讲解 四.同步视频讲解 一.介绍read_html()函数 喜欢Python编程的小伙伴你知道吗,python的pandas库除 ...
- 30个Python奇淫技巧集
我们的青铜菜鸟群最近加了很多人,有不少是学生加入的,在后台的留言跟我们说,时间紧任务重,又要考研,又要学Python,而Python里面的技巧又非常多,能否整理一份技巧集给我们. 今天小编熬夜整理了一 ...
- 引入flag.php文件,php文件自包含的奇淫技巧
原标题:php文件自包含的奇淫技巧 前言 刷题的时候刚好看到一个比较厉害的phpinfo的利用姿势,原理不是很懂,题目来自百度杯12月第四场Blog进阶版 以下是writeup 解题过程 注册以后 发 ...
- 50个Pandas的奇淫技巧:一网打尽各种索引 iloc,loc,ix,iat,at…
数据处理,也是风控非常重要的一个环节,甚至说是模型成败的关键环节.因此,娴熟简洁的数据处理技巧,是提高建模效率和建模质量的必要能力.这里开个专题,总结下Pandas的使用方法,方便大家,也方便自己查阅 ...
- idea中常用的快捷键以及一些奇淫技巧 , 加快我们的开发效率
idea中常用的快捷键以及一些奇淫技巧 , 加快我们的开发效率 !!! 知道类名查找你本地以的类 (你pom中依赖的类+你自己创建的类)------------- ctrl+shift+t 修改你创建 ...
- JavaScript奇淫技巧:按键精灵
JavaScript奇淫技巧:按键精灵 按键精灵之类的自动化工具,可以解放双手,帮我们自动完成许多工作,在很多场景中,可以极大提升生产力. 本文将展示:用JavaScript实现一个"按键精 ...
- 【JavaScript】转载:JS高端奇淫技巧
转自 : https://blog.csdn.net/github_38885296/article/details/91038735 感谢作者(流浪的狗和一坨屎)分享 众所周知, JavaScrip ...
- 50个Pandas的奇淫技巧:向量化字符串,玩转文本处理
大家好,我是小伍哥. 数据处理,也是风控非常重要的一个环节,甚至说是模型成败的关键环节.因此,娴熟简洁的数据处理技巧,是提高建模效率和建模质量的必要能力.这里开个专题,总结下Pandas的使用方法,方 ...
最新文章
- windows8.1与centos7.0双系统启动项设置
- 第十、十一周项目-阅读程序,写出这些程序的运行结果(1)
- 配置FTP服务-要点总结
- java8 lambda python_【学习笔记】java8 Lambda表达式语法及应用
- 正确率 精度 召回率 错误率
- 推荐系统rank模块-Online Learning
- Python中第三方的库(library)、模块(module),包(package)的安装方法以及ImportError: No module named...
- as_hash ruby_Ruby中带有示例的Hash.keep_if方法
- 应用数仓ODBC前,这些问题你需要先了解一下
- php和asp渲染页面,Vue.js与 ASP.NET Core 服务端渲染功能
- c语言二级编程题库,计算机二级C语言编程题库(100题)
- CTPN算法简单解析
- Java API 帮助文档中英文版下载
- 11种职场肢体语言,你懂吗
- 计算机开机总要按f1键,为什么开机要按f1键?win7每次开机按f1才能进入系统怎么办...
- 51单片机c语言相位计,相位计.doc
- 【Python脚本抢红包】用Python写了一个自动抢红包工具,今年过年准备大干一场
- MySQL 第三章习题
- 分布式学习笔记001
- 你知不知道,天空没有想象中蓝。