赞
踩
关注它,不迷路。
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!
在上一篇文章发布后,群里有很多的小伙伴注册了账户,现在注册还能白嫖10000点数:
可供大家试用打码平台的服务,赶紧注册哟.地址:
注册地址点击左下角的 阅读原文 可以直达。
它的api地址在这里:
api地址大家可以通过查看这个文档,能知道如何调用它的api。
同时,我也让他们技术给了个简单针对谷歌验证码V2的demo,代码如下:
- import time
- import requests
- requests.packages.urllib3.disable_warnings()
-
-
- cap_key = "" #客户端秘钥 https://dashboard.ez-captcha.com/#/dashboard 右侧可以看到
-
-
- def cap_create_task(websiteURL, websiteKey, taskType, isInvisible, pageAction=None) -> str:
- url = "https://api.ez-captcha.com/createTask"
- data = {
- "clientKey": cap_key,
- "task": {
- "websiteURL": websiteURL,
- "websiteKey": websiteKey,
- "type": taskType,
- "isInvisible": isInvisible,
- # "pageAction": pageAction
- }
- }
- try:
- result = requests.post(url, json=data, verify=False, timeout=8)
- result = result.json()
- taskId = result.get('taskId')
- if taskId is not None:
- return taskId
-
-
- except Exception as e:
- print(e)
-
-
-
-
- def cap_get_response(taskID: str):
- times = 0
- start_time = time.time()
- while times < 120:
- try:
- url = "https://api.ez-captcha.com/getTaskResult"
- data = {
- "clientKey": cap_key,
- "taskId": taskID
- }
- result = requests.post(url, json=data, verify=False, timeout=8).json()
- solution = result.get('solution', {})
- if solution:
- response = solution.get('gRecaptchaResponse')
- if response:
- print(f"消耗时间 {time.time()-start_time}s")
- print(response)
- return response
- except Exception as e:
- print(e)
-
-
- times += 1
- time.sleep(1)
- return ""
-
-
-
-
- def get_token():
- type = "RecaptchaV2TaskProxyless"
- websiteURL = "" # 控制台执行获取,见最后的注释
- websiteKey = "" # 控制台执行获取,见最后的注释
- isInvisible = False
-
-
- taskId = cap_create_task(websiteURL, websiteKey, type, isInvisible, None)
- result = cap_get_response(taskId)
- return result
-
-
-
-
-
-
- if __name__ == '__main__':
-
-
- re_token = get_token()
- print (re_token)
代码中的 cap_key 是与账户相关的密钥,它在 仪表盘中可以直接看到:
可以访问下面的链接来查看:
仪表盘而 websiteURL 和 websiteKey 可以通过 网页的控制台来获取。在一个有谷歌验证码的网站上打开控制台,以 52破解 的登录网站为例:
在这个页面按下F12,切换 控制台 选项,输入下面的代码并回车:
- function findRecaptchaClients() {
- // eslint-disable-next-line camelcase
- if (typeof (___grecaptcha_cfg) !== 'undefined') {
- // eslint-disable-next-line camelcase, no-undef
- return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => {
- const data = { id: cid, version: cid >= 10000 ? 'V3' : 'V2' };
- const objects = Object.entries(client).filter(([_, value]) => value && typeof value === 'object');
-
-
- objects.forEach(([toplevelKey, toplevel]) => {
- const found = Object.entries(toplevel).find(([_, value]) => (
- value && typeof value === 'object' && 'sitekey' in value && 'size' in value
- ));
-
- if (typeof toplevel === 'object' && toplevel instanceof HTMLElement && toplevel['tagName'] === 'DIV'){
- data.pageurl = toplevel.baseURI;
- }
-
- if (found) {
- const [sublevelKey, sublevel] = found;
-
-
- data.sitekey = sublevel.sitekey;
- const callbackKey = data.version === 'V2' ? 'callback' : 'promise-callback';
- const callback = sublevel[callbackKey];
- if (!callback) {
- data.callback = null;
- data.function = null;
- } else {
- data.function = callback;
- const keys = [cid, toplevelKey, sublevelKey, callbackKey].map((key) => `['${key}']`).join('');
- data.callback = `___grecaptcha_cfg.clients${keys}`;
- }
- }
- });
- return data;
- });
- }
- return [];
- }
- findRecaptchaClients()
如下:
将 pageurl的值赋值给 websiteURL ,以及 sitekey的值赋值给 websiteKey 即可。
将上面的值赋值给相关的参数后,我们来运行一下:
返回了这么大一串字符串,那它是什么呢?
我们来抓抓 过了谷歌验证码的包试试:
这个包是最后登录的 post 参数,也就是过掉谷歌验证码最后提交的结果。
直接可以拿来用,太省事了。
今天的文章就分享到这里,后续分享更多的技巧,敬请期待。
欢迎加入知识星球,学习更多AST和爬虫技巧。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。