From 799fd1cd23ec8180d0ddaac2fc4b53e31512f628 Mon Sep 17 00:00:00 2001 From: mikumifa <1055069518@qq.com> Date: Wed, 5 Jun 2024 20:14:25 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E8=87=AA=E5=8A=A8=E9=A9=B1?= =?UTF-8?q?=E5=8A=A8=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 10 ++--- tab/go.py | 11 ++++++ tab/login.py | 93 ++++++++++++++++++++++++++++++++++++++++++++ tab/settings.py | 4 +- tab/train.py | 8 ++++ util/bili_request.py | 9 +++++ util/config_util.py | 5 +++ 7 files changed, 133 insertions(+), 7 deletions(-) create mode 100644 tab/login.py diff --git a/main.py b/main.py index d0c7b76..46b2ccc 100644 --- a/main.py +++ b/main.py @@ -1,16 +1,15 @@ -from loguru import logger - import gradio as gr +from loguru import logger from tab.go import go_tab +from tab.login import login_tab from tab.settings import setting_tab from tab.train import train_tab - header = """ # B 站会员购抢票🌈 -⚠️此项目仅用于个人参考学习,切勿进行盈利,所造成的后果与本人无关。 +⚠️此项目完全开源免费 ([项目地址](https://github.com/mikumifa/biliTickerBuy)),切勿进行盈利,所造成的后果与本人无关。 """ short_js = """ @@ -28,7 +27,6 @@ if __name__ == "__main__": logger.add("app.log") - with gr.Blocks(head=short_js, css=custom_css) as demo: gr.Markdown(header) with gr.Tab("配置"): @@ -37,6 +35,8 @@ go_tab() with gr.Tab("训练你的验证码速度"): train_tab() + with gr.Tab("登录管理"): + login_tab() # 运行应用 print("点击下面的网址运行程序 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓") diff --git a/tab/go.py b/tab/go.py index 742ac35..1446f09 100644 --- a/tab/go.py +++ b/tab/go.py @@ -206,6 +206,17 @@ def start_go(tickets_info_str, time_start, interval, mode, total_attempts): def go_tab(): + gr.Markdown(""" +> **分享一下经验** +> - 抢票前,不要去提前抢还没有发售的票,会被b站封掉一段时间导致错过抢票的 +> - 热门票要提前练习过验证码 +> - 如果要使用自动定时抢,电脑的时间和b站的时间要一致 +> - 使用不同的多个账号抢票 (可以每一个exe文件都使用不同的账号, 或者在使用这个程序的时候,手机使用其他的账号去抢) +> - 程序能保证用最快的速度发送订单请求,但是不保证这一次订单请求能够成功。所以不要完全依靠程序 +> - 现在各个平台抢票和秒杀机制都是进抽签池抽签,网速快发请求多快在拥挤的时候基本上没有效果 +> 此时就要看你有没有足够的设备和账号来提高中签率 +> - 欢迎前往[discussions](https://github.com/mikumifa/biliTickerBuy/discussions) 分享你的经验 +""") with gr.Column(): ticket_ui = gr.TextArea( label="填入配置", info="再次填入配置信息", interactive=True diff --git a/tab/login.py b/tab/login.py new file mode 100644 index 0000000..61ffa6e --- /dev/null +++ b/tab/login.py @@ -0,0 +1,93 @@ +import json + +import gradio as gr +from loguru import logger + +from config import cookies_config_path +from util.bili_request import BiliRequest + +names = [] + + +@logger.catch +def login_tab(): + gr.Markdown(""" +> **补充** +> +> 在这里,你可以 +> 1. 去更改账号, +> 2. 查看当前程序正在使用哪个账号 +> 3. 使用配置文件切换到另一个账号 +> +""") + main_request = BiliRequest(cookies_config_path=cookies_config_path) + username_ui = gr.Text( + main_request.get_request_name(), + label="账号名称", + interactive=False, + info="当前账号的名称", + ) + gr.Markdown("""🏵️ 登录""") + info_ui = gr.TextArea( + info="此窗口为输出信息", label="输出信息", interactive=False + ) + add_btn = gr.Button("重新登录") + with gr.Column() as out_col: + out_btn = gr.Button("导出") + login_config = gr.Text( + label="导出登录信息,复制后粘贴到其他地方即可", + visible=False, + interactive=False, + show_copy_button=True + ) + + def out(): + return gr.update(value=json.dumps(main_request.cookieManager.config), visible=True) + + out_btn.click( + fn=out, + inputs=None, + outputs=login_config + ) + with gr.Column() as in_col: + in_btn = gr.Button("导入") + in_text_ui = gr.Text( + label="先将登录信息粘贴到此处,然后点击导入", + interactive=True, + ) + + def in_fn(text): + temp = main_request.cookieManager.config + try: + main_request.cookieManager.config = json.loads(text) + main_request.cookieManager.dump_config() + name = main_request.get_request_name() + return [f"退出重启一下来保证完全更改", gr.update(name)] + except Exception: + main_request.cookieManager.config = temp + main_request.cookieManager.dump_config() + return ["配置文件错误,未修改", gr.update()] + + in_btn.click( + fn=in_fn, + inputs=in_text_ui, + outputs=[info_ui, username_ui] + ) + + def add(): + temp = main_request.cookieManager.config + yield ["将打开浏览器,请在浏览器里面重新登录", gr.update()] + try: + main_request.cookieManager.get_cookies_str_force() + name = main_request.get_request_name() + yield [f"退出重启一下来保证完全更改", gr.update(name)] + except Exception: + main_request.cookieManager.config = temp + main_request.cookieManager.dump_config() + yield ["配置文件错误,未修改", gr.update()] + + add_btn.click( + fn=add, + inputs=None, + outputs=[info_ui, username_ui] + ) diff --git a/tab/settings.py b/tab/settings.py index 6e7414a..0c09fed 100644 --- a/tab/settings.py +++ b/tab/settings.py @@ -140,9 +140,9 @@ def on_submit_all(ticket_id, ticket_info, people_indices, people_buyer_index, ad def setting_tab(): gr.Markdown(""" -> **补充** +> **必看** > -> 保证自己在抢票前,已经配置了地址和购买人信息(就算不需要也要提前填写) +> 保证自己在抢票前,已经配置了地址和购买人信息(就算不需要也要提前填写) 如果没填,生成表单时候不会出现任何选项 > > - 地址 : 会员购中心->地址管理 > - 购买人信息:会员购中心->购买人信息 diff --git a/tab/train.py b/tab/train.py index 5f921e3..a761e09 100644 --- a/tab/train.py +++ b/tab/train.py @@ -6,6 +6,14 @@ def train_tab(): + gr.Markdown(""" +> **补充** +> +> 在这里,你可以 +> 1. 提前知道抢票时候验证码的过程 +> 2. 训练验证码,提高验证码速度 +> +""") _request = BiliRequest(cookies_config_path=cookies_config_path) gr.Markdown("💪 在这里训练一下手过验证码的速度,提前演练一下") diff --git a/util/bili_request.py b/util/bili_request.py index 0580881..fe9cedf 100644 --- a/util/bili_request.py +++ b/util/bili_request.py @@ -25,6 +25,7 @@ def __init__(self, headers=None, cookies=None, cookies_config_path=""): } def get(self, url, data=None): + self.headers["cookies"] = self.cookieManager.get_cookies_str() response = self.session.get(url, data=data, headers=self.headers) response.raise_for_status() if response.json().get("msg", "") == "请先登录": @@ -33,6 +34,7 @@ def get(self, url, data=None): return response def post(self, url, data=None): + self.headers["cookies"] = self.cookieManager.get_cookies_str() response = self.session.post(url, data=data, headers=self.headers) response.raise_for_status() if response.json().get("msg", "") == "请先登录": @@ -40,6 +42,13 @@ def post(self, url, data=None): self.post(url, data) return response + def get_request_name(self): + try: + result = self.get("https://api.bilibili.com/x/web-interface/nav").json() + return result["data"]["uname"] + except Exception: + return "未登录" + if __name__ == "__main__": payload = {} diff --git a/util/config_util.py b/util/config_util.py index 325a09a..0bc520b 100644 --- a/util/config_util.py +++ b/util/config_util.py @@ -57,6 +57,11 @@ def dump_config(self): with open(self.config_file_path, "w") as f: json.dump(self.config, f, indent=4) + def clear_config(self): + self.config = {} + with open(self.config_file_path, "w") as f: + json.dump(self.config, f, indent=4) + def get_cookies(self): try: with open(self.config_file_path, "r") as f: From e14380c3fc14adf37cb61134c9e14425558cecdf Mon Sep 17 00:00:00 2001 From: mikumifa <1055069518@qq.com> Date: Wed, 5 Jun 2024 20:17:57 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E6=99=9A=E4=B8=8Areadme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 6be9bbb..8030284 100644 --- a/README.md +++ b/README.md @@ -11,33 +11,9 @@ -适合小白的, 图形化的B站会员购抢票软件, 自带图形界面, -纯接口抢票. [点我查看视频展示](https://www.bilibili.com/video/BV1tg4y197wa) +简单易用,图形界面, 速度极快的B站会员购抢票. -免责声明:详见[MIT License](./LICENSE),此仓库仅用于个人参考学习,但如他人用本仓库代码用于商业用途(鄙视黄牛) -,侵犯到B站利益等,本人不承担任何责任。切勿进行盈利,所造成的后果与本人无关。 - -## 特性 - -
- - - - - -### 打包运行 - -对抢票软件进行打包 - -### 纯接口抢票 - -具有很快的速度 - -### 图像界面 - -适合小白 - -
+免责声明:详见[MIT License](./LICENSE),切勿进行盈利,所造成的后果与本人无关。 ## 快速安装