Skip to content

Commit

Permalink
feat: AmorterValidator
Browse files Browse the repository at this point in the history
  • Loading branch information
mikumifa committed Jun 14, 2024
1 parent 64fa4bf commit 8df8dd4
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 10 deletions.
Binary file added click.exe
Binary file not shown.
58 changes: 58 additions & 0 deletions geetest/AmorterValidator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import time

import bili_ticket_gt_python
import loguru
from retry import retry

from config import cookies_config_path
from geetest.Validator import Validator
from util.bili_request import BiliRequest


class AmorterValidator(Validator):
def __init__(self):
self.click = bili_ticket_gt_python.ClickPy()
pass

@retry()
def validate(self, appkey, gt, challenge, referer="http://127.0.0.1:7860/") -> str:
try:
(_, _) = self.click.get_c_s(gt, challenge)
_type = self.click.get_type(gt, challenge)
if _type != "click":
raise Exception("验证码类型错误")
(c, s, args) = self.click.get_new_c_s_args(gt, challenge)
before_calculate_key = time.time()
key = self.click.calculate_key(args)
# rt固定即可
# 此函数是使用项目目录下的click.exe生成w参数,如果文件不存在会报错,你也可以自己接入生成w的逻辑函数
w = self.click.generate_w(key, gt, challenge, str(c), s, "abcdefghijklmnop")
# 点选验证码生成w后需要等待2秒提交
w_use_time = time.time() - before_calculate_key
loguru.logger.info(f"w生成时间:{w_use_time}")
if w_use_time < 2:
time.sleep(2 - w_use_time)
(msg, validate) = self.click.verify(gt, challenge, w)
loguru.logger.info(f"msg: {msg} ; validate: {validate}")
return validate
except Exception as e:
loguru.logger.warning(e)
raise e


if __name__ == "__main__":
# 使用示例
appkey = "xxxxxxxxxxxxxxxxxxx"
_request = BiliRequest(cookies_config_path=cookies_config_path)
test_res = _request.get(
"https://passport.bilibili.com/x/passport-login/captcha?source=main_web"
).json()
challenge = test_res["data"]["geetest"]["challenge"]
gt = test_res["data"]["geetest"]["gt"]

validator = AmorterValidator()
try:
validate_string = validator.validate(appkey, gt, challenge)
print(f"Validation String: {validate_string}")
except Exception as e:
print(f"Error: {e}")
Binary file added slide.exe
Binary file not shown.
14 changes: 8 additions & 6 deletions tab/go.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
import json
import threading
import time
import uuid
from datetime import datetime
from json import JSONDecodeError
from urllib.parse import urlencode
import uuid

import gradio as gr
import qrcode
from loguru import logger

from common import format_dictionary_to_string
from config import cookies_config_path, global_cookieManager
from geetest.AmorterValidator import AmorterValidator
from geetest.CapSolverValidator import CapSolverValidator
from geetest.RROCRValidator import RROCRValidator
from util.bili_request import BiliRequest
Expand All @@ -19,8 +21,8 @@

isRunning = False

ways = ["手动", "使用 rrocr", "使用 CapSolver"]
ways_detail = [None, RROCRValidator(), CapSolverValidator()]
ways = ["手动", "使用 rrocr", "使用 CapSolver", "本地验证码(Amorter提供)"]
ways_detail = [None, RROCRValidator(), CapSolverValidator(), AmorterValidator()]


def go_tab():
Expand Down Expand Up @@ -59,7 +61,7 @@ def choose_option(way):
global select_way
select_way = way
# loguru.logger.info(way)
if way == 0:
if way in [0, 3]:
# rrocr
return gr.update(visible=False)
else:
Expand Down Expand Up @@ -151,7 +153,7 @@ def start_go(tickets_info_str, time_start, interval, mode, total_attempts, api_k
challenge = _data["data"]["geetest"]["challenge"]
token = _data["data"]["token"]
try:
if select_way != 2:
if select_way in [0, 1, 3]:
yield [
gr.update(value=withTimeString("进行验证码验证"), visible=True),
gr.update(visible=True),
Expand All @@ -161,7 +163,7 @@ def start_go(tickets_info_str, time_start, interval, mode, total_attempts, api_k
gr.update(value=challenge),
gr.update(value=uuid.uuid1()),
]
if select_way != 0:
if select_way in [1, 2, 3]:
# https://passport.bilibili.com/x/passport-login/captcha?source=main_web
def run_validation():
global geetest_validate, geetest_seccode
Expand Down
9 changes: 5 additions & 4 deletions tab/train.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import threading
import uuid
from urllib.parse import urlencode

import gradio as gr

from config import cookies_config_path
from tab.go import ways_detail, ways
from util.bili_request import BiliRequest
import uuid


def train_tab():
gr.Markdown("""
Expand Down Expand Up @@ -44,7 +45,7 @@ def choose_option(way):
global select_way
select_way = way
# loguru.logger.info(way)
if way == 0:
if way in [0, 3]:
# rrocr
return gr.update(visible=False)
else:
Expand Down Expand Up @@ -92,7 +93,7 @@ def test_get_challenge(api_key):

try:
# Capture 不支持同时
if select_way != 2:
if select_way in [0, 1, 3]:
yield [
gr.update(value=test_gt), # test_gt_ui
gr.update(value=test_challenge), # test_challenge_ui
Expand All @@ -101,7 +102,7 @@ def test_get_challenge(api_key):
gr.update(),
gr.update(value=uuid.uuid1())
]
if select_way != 0:
if select_way in [1, 2, 3]:
def run_validation():
global test_geetest_validate, test_geetest_seccode
validator = ways_detail[select_way]
Expand Down

0 comments on commit 8df8dd4

Please sign in to comment.