记录⼀次⾕歌⼈机验证码破解过程
前⾔
哈喽,各位⼩伙伴,你们好呀,今天呢,咱们来说⼀下google,我们都知道,google是⽬前地表最强的搜索引擎了,我们可以借助google庞⼤的搜索资源到⼀些⾃⼰想要的资源,可能是⼀些收费电影,可能是⼀些奇门⼩说,可能是某个⾓落的种⼦,不管怎么说,google搜索还是挺给⼒的,但是呢,有梯⼦的我们可能都遇到过,我们搜索的多了,会有这种情况
这种验证码呢,叫做ReCaptcha验证码,相对来说,是⽐较繁琐的验证码之⼀
当然了,ReCaptcha不⽌⾕歌⼀家再⽤,国外的⽹站很多都是使⽤这种验证码,但是在国内不多,因为在国内⽐较容易被墙,所以⽤的少,但是我们是⾼端玩家,在⾃由的internet中,我们怎么可能只局限于国内,下⾯,我们就针对ReCaptcha验证码破解
⾕歌提供的范例,实际⽹站验证码和这个⼀模⼀样
ReCaptcha验证码样式
为什么使⽤第三⽅平台
嗯,看到这可能有⼈会对我不屑⼀顾,说辣鸡才会⽤第三⽅平台,要是按照技术来划分的话,我真的辣鸡,哈哈
但是这⾥要抬杠⼀下,并不是说⽤第三⽅平台就是辣鸡,我们可以想象⼀下,如果是滑动验证码,我们当然有⼀试的能⼒,python可以调⽤OpenCV,看看⽂档,当然是可以实现了,但是有个问题是,你可能针对的⼀个⽹站的滑动验证识别好了,但是可能每个⽹站的滑动验证码都不太⼀样,在⽤OpenCV识别的时候,可能就会识别率低的情况,要是在公司,⼀直完不成任务,嗯,,,等着被炒鱿鱼吧,再说,像⾕歌⼈机个⼈也解决不了,没有NB的机器学习是不可能的,所以只能⽤第三⽅平台,毕竟,完成任务才是⾸要任务
为什么推荐2captcha平台
我们先说⼀下现在打码平台机制都有哪些
第⼀种呢,就是打码平台训练好各种各样的数据,⽐如,哪些是花,哪些是车,然后我们把图⽚发送给打码平台,他给我们结果,但是这样会有个问题,如果训练的不好,我们这边的结果也是很不好的,各种不准确,影响效果
第⼆种呢,就是平台雇⼈,我们把整个验证码都给打码平台,平台⼈帮助我们点击,然后把结果给我们,我们在登录了或者做其他
我们可以看出来,肯定是第⼆种更加灵活地,现在阶段,机器再NB,⾄少在验证码上准确率还是不如⼈的
2captcha平台⽬前采⽤的就是第⼆种⽅式,赚取的是中间差价,但是识别率是我⽤过最⾼的,曾经因为选错了平台,⼀直不成功,加班加点,⿏标都被我砸坏了,唉,所以,选择⼀个合适的平台还是很重要的
所需⼯具
Chromedriver:浏览器驱动,可以理解为⼀个没有界⾯的chrome浏览器
Selenium:⽤于模拟⼈对浏览器进⾏点击、输出、拖拽等操作,就相当于是个⼈在使⽤浏览器,也常常⽤来应付反爬⾍措
开始⾏动
既来之则安之,选择了2captcha,就要看看⼈家的官⽹啦
打开官⽹
嗯...纯英⽂,我也看不懂..怎么办呢,别着急,我带你们⼀步⼀步分析主要功能
登录账号
登录完成后,会⾃动跳到主页
第⼀个红⾊圈起来的地⽅表⽰剩余多少钱,没有钱的话记得要氪⾦,否则是不能⽤滴,氪⾦过程这⾥就不多做解释了哈,问题不⼤
第⼆个红⾊圈起来的地⽅表⽰这是你的唯⼀key,每次请求要带上这个key的,所以要保管好
进⼊主题,研究⽂档
点击红⾊圈的地⽅,API,⼀般API都是⽂档,let's go
En....什么玩意..完全看不懂,别慌,往下滑
滑到rates,我们知道,⾕歌⼈机是ReCaptcha,但是三个呢,到底是哪个呢,我就来带⼤家看看
⾸先点击ReCaptcha(oldmethod),这个是⽼的⽅法,咱也不知道唉,所以就先看看这个吧,从浅到深嘛,这⾥呢,我都直接翻译了⼀下,⽅便我们观看
Look,⼈家也说了,旧⽅法解决ReCaptcha准确率⽐较低,建议使⽤新⽅法,那我们就点击新⽅法去看
看
我们到了,这种属于ReCaptcha v2验证码,确实和⾕歌⼈机挺⼀样的,我们来看⼀下⽂档是怎么写的
然后到id=g-recaptcha-response的textarea标签,将display:none 这个css删除
将给我们字符串添加到textarea输⼊框点击提交,就完成了
是不是很简单,我们也来试⼀下
打开⾕歌的⽰例样式
我们打开开发者⼯具,搜索data-sitekey,可以看到,真的有⼀个
我们赋值⼀下这个data-sitekey,并且⽤代码获取到最后的结果
然后我们到 id=g-recaptcha-response 的textarea标签,将他的display属性删除
但是有点不太对
我们的
2captcha的⽰例的
我们可以看到,2captcha是个删除display之后,textarea框是直接展⽰出来的,但是我们删除display之后,基本没⽤丝毫动静,这...
别着急,⼈家都想到了,我们往下滑滑
既然我们不能直接显⽰出来textarea,那就说明我们是隐式的ReCaptcha验证码,其实他的原理呀,也挺简单
如果你学过⼀些前端,会些js,你可能就会想到,虽然我看不到这个textarea,但是通过js我们仍然能更改textarea的数据,只是说,我们⿏标点击不了⽽已,⼈家也说了,看第⼀个红圈的位置,通过此js,我们我们就可以把向2captcha获取的值赋值上,第⼆个圈js是提交表单,其实就是我们⼈点击提交⽽已,只不过是js代码帮我们完成了,这样,我们也完成了⼀个偷天换⽇
⼩试⽜⼑
好嘞,我们就先来⼿动搞⼀下,在上述中,我们已经根据data-sietkey拿到了最后的结果,显然,我们只能通过js完成,那么,我们就试⼀下
通过上述gif看到,我们通过js,确实绕过了点击车辆识别了,其他识别,确实⽅便,
但是我们不可能通过⼈每次这样搞呀,但是因为牵扯到了执⾏js,所以只能使⽤selenium,所以,我们来看⼀下selenium上的效果吧
Look,这样,我们就针对⾕歌⼈机(ReCaptcha)验证码,完成了⾃动登录,如果爬取国外的某某⽹站时,如果遇到了ReCaptcha,我相信⼀定会对你有帮助
完整代码
import time
from selenium import webdriver
from selenium.webdriver.chrome.webdriver import WebDriver
import requests
# 常量
driver: WebDriver
USER = {}
API_KEY = "xxxxxxxxxxxxxxx"
# 初始化
def init():
global driver
driver = webdriver.Chrome("", desired_capabilities=None)
def open_google():
<("le/recaptcha/api2/demo")
data_sitekey = driver.find_element_by_xpath('//*[@id="recaptcha-demo"]').get_attribute("data-sitekey")
# iframe_src = driver.find_element_by_xpath('//*[@id="recaptcha-demo"]/div/div/iframe').get_attribute("src")
# iframe_k = url_params_format(iframe_src).get("k")
print(data_sitekey)
page_url = "le/recaptcha/api2/demo"
# print(iframe_k)
u1 = f"2captcha/in.php?key={API_KEY}&method=userrecaptcha&googlekey={data_sitekey}&pageurl={page_url}&json=1&invisible=1" r1 = (u1)
print(r1.json())
rid = r1.json().get("request")
u2 = f"2captcha/res.php?key={API_KEY}&action=get&id={int(rid)}&json=1"
time.sleep(25)
while True:chrome浏览器是啥浏览器
print(u2)
r2 = (u2)
print(r2.json())
if r2.json().get("status") == 1:
form_tokon = r2.json().get("request")
break
time.sleep(5)
wirte_tokon_js = ElementById("g-recaptcha-response").innerHTML="{form_tokon}";'
submit_js = 'ElementById("recaptcha-demo-form").submit();'
time.sleep(1)
if__name__ == '__main__':
init()
open_google()
Code
谢谢观看,谢谢⽀持
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论