diff --git a/main.py b/main.py index 2c2b48e..1dc617e 100644 --- a/main.py +++ b/main.py @@ -95,7 +95,7 @@ def onSubmitAll(ticket_number, ticket_info, people, people_buyer, address): def start_go(tickets_info, time_start, interval, mode, total_attempts): - global isRunning + global isRunning, geetest_validate, geetest_seccode global gt global challenge result = "" @@ -130,7 +130,7 @@ def start_go(tickets_info, time_start, interval, mode, total_attempts): # gt = "ac597a4506fee079629df5d8b66dd4fe" yield [gr.update(value="进行验证码验证", visible=True), gr.update(), gr.update(), gr.update(visible=True), gr.update(value=gt), gr.update(value=challenge)] - while geetest_validate == "" and geetest_seccode == "": + while geetest_validate == "" or geetest_seccode == "": continue logging.info(f"geetest_validate: {geetest_validate},geetest_seccode: {geetest_seccode}") _url = "https://api.bilibili.com/x/gaia-vgate/v1/validate" @@ -144,6 +144,8 @@ def start_go(tickets_info, time_start, interval, mode, total_attempts): "validate": geetest_validate } _data = _request.get(_url, urlencode(_payload)) + geetest_validate = "" + geetest_seccode = "" if _data["code"] == 0: logging.info("极验GeeTest认证 成功") else: @@ -180,7 +182,7 @@ def start_go(tickets_info, time_start, interval, mode, total_attempts): qr_gen.add_data(qrcode_url) qr_gen.make(fit=True) qr_gen_image = qr_gen.make_image() - yield [gr.update(value="生成二维码"), gr.update(), + yield [gr.update(value="生成付款二维码"), gr.update(), gr.update(value=qr_gen_image.get_image(), visible=True), gr.update(), gr.update(), gr.update()] time.sleep(interval / 1000.0) @@ -279,12 +281,12 @@ def configure_global_logging(): qr_image = gr.Image(label="使用微信或者支付宝扫码支付", visible=False) with gr.Row(visible=False) as gt_row: - gt_html_btn = gr.Button("存在验证码,点击开启,开启抢票验证码") + gt_html_btn = gr.Button("点击打开抢票验证码(请勿多点!!)") gt_html_finish_btn = gr.Button("完成验证码后点此此按钮") gt_html = gr.HTML(value="""
- +
""", label="验证码") diff --git a/test.py b/test.py new file mode 100644 index 0000000..02f9a08 --- /dev/null +++ b/test.py @@ -0,0 +1,90 @@ +from urllib.parse import urlencode + +import gradio as gr + +from config import cookies_config_path +from util.BiliRequest import BiliRequest + +_request = BiliRequest(cookies_config_path=cookies_config_path) +res = _request.get("https://passport.bilibili.com/x/passport-login/captcha?source=main_web").json() +challenge = res["data"]["geetest"]["challenge"] +gt = res["data"]["geetest"]["gt"] + +token = res["data"]["token"] +_url = "https://api.bilibili.com/x/gaia-vgate/v1/validate" +csrf = _request.cookieManager.get_cookies_value("bili_jct") + +short_js = """ + + """ +geetest_validate = "" +geetest_seccode = "" +with gr.Blocks(head=short_js) as demo: + gt_html_btn = gr.Button("开始") + gt_html_finish_btn = gr.Button("结束") + print("gt,challenge", gt, challenge) + gt_html_btn.click(fn=None, inputs=None, outputs=None, + js=f"""() => {{ initGeetest({{ + gt: "{gt}", + challenge: "{challenge}", + offline: false, + new_captcha: true, + product: "popup", + width: "300px", + https: true + }}, function (captchaObj) {{ + window.captchaObj = captchaObj; + captchaObj.appendTo('#captcha'); + }})}}""") + geetest_validate_ui = gr.Textbox(visible=False) + geetest_seccode_ui = gr.Textbox(visible=False) + + gt_html = gr.HTML(value=""" +
+ +
+
+
""", label="验证码") + gt_ui = gr.Textbox(visible=False) + challenge_ui = gr.Textbox(visible=False) + + gt_html_finish_btn.click(None, None, geetest_validate_ui, + js='() => {return captchaObj.getValidate().geetest_validate}') + gt_html_finish_btn.click(None, None, geetest_seccode_ui, + js='() => {return captchaObj.getValidate().geetest_seccode}') + + + def doing(): + while geetest_validate == "" or geetest_seccode == "": + continue + _payload = { + "challenge": challenge, + "token": token, + "seccode": geetest_seccode, + "csrf": csrf, + "validate": geetest_validate + } + _data = _request.get(_url, urlencode(_payload)) + print(_data.json()) + + + gt_html_finish_btn.click(doing) + + + def update_geetest_validate(x): + global geetest_validate + geetest_validate = x + + + def update_geetest_seccode(x): + global geetest_seccode + geetest_seccode = x + + + geetest_validate_ui.change(fn=update_geetest_validate, inputs=geetest_validate_ui, outputs=None) + geetest_seccode_ui.change(fn=update_geetest_seccode, inputs=geetest_seccode_ui, outputs=None) + # 运行应用 +demo.launch() diff --git a/util/BiliRequest.py b/util/BiliRequest.py index e1bd69b..cd598d2 100644 --- a/util/BiliRequest.py +++ b/util/BiliRequest.py @@ -27,7 +27,7 @@ def __init__(self, headers=None, cookies=None, cookies_config_path=""): def get(self, url, data=None): response = self.session.get(url, data=data, headers=self.headers) response.raise_for_status() - if response.json()["msg"] == "请先登录": + if response.json().get("msg", "") == "请先登录": self.headers['cookies'] = self.cookieManager.get_cookies_str_force() self.get(url, data) return response @@ -35,7 +35,7 @@ def get(self, url, data=None): def post(self, url, data=None): response = self.session.post(url, data=data, headers=self.headers) response.raise_for_status() - if response.json()["msg"] == "请先登录": + if response.json().get("msg", "") == "请先登录": self.headers['cookies'] = self.cookieManager.get_cookies_str_force() self.post(url, data) return response