Evilmass commited on
Commit
5b6bac4
·
1 Parent(s): 6ca77be

fix bilibili is_login

Browse files
_playwright/[no_use]aliyundrive.py DELETED
@@ -1,79 +0,0 @@
1
- # coding:utf-8
2
- import sys
3
- import asyncio
4
-
5
- from os.path import abspath, dirname, join
6
- from playwright.async_api import async_playwright
7
-
8
- sys.path.append(join(dirname(abspath(__file__)), "../"))
9
-
10
- from utils import push_msg
11
- from __init__ import (
12
- browser_headless,
13
- browser_proxy,
14
- aliyundrive_url,
15
- aliyundrive_cookie_file,
16
- aliyundrive_title,
17
- aliyundrive_logger,
18
- )
19
-
20
-
21
- # 判断登录状态
22
- async def is_login(page):
23
- await page.goto(aliyundrive_url)
24
- # page.locator("li").filter(has_text="回收站").get_by_role("img").click()
25
- if page.get_by_text("回收站").is_visible(): # 加 await 就会在页面加载完成前跳过
26
- aliyundrive_logger.info("登录成功")
27
- return True
28
- else:
29
- stderr = "Cookie 过期"
30
- aliyundrive_logger.error(stderr)
31
- push_msg(aliyundrive_title, stderr)
32
- return False
33
-
34
-
35
- # 签到
36
- async def sign(page):
37
- msg = []
38
-
39
- if not await is_login(page):
40
- return "aliyundrive_not_login"
41
-
42
- # await page.pause()
43
-
44
- if page.get_by_text("待领取").is_visible():
45
- sign_res = "今日已签到"
46
- aliyundrive_logger.info(sign_res)
47
- msg.append(sign_res)
48
- # 领取奖励
49
- await page.get_by_text("待领取").click()
50
- reward_res = "今日领取奖励成功"
51
- aliyundrive_logger.info(reward_res)
52
- elif page.get_by_text("待签到").is_visible():
53
- await page.get_by_text("待签到").click()
54
- sign_res = "签到成功"
55
- aliyundrive_logger.info(sign_res)
56
- msg.append(sign_res)
57
- else:
58
- reward_res = "今日奖励已领取"
59
- aliyundrive_logger.info(reward_res)
60
- return "\n".join(msg)
61
-
62
-
63
- async def main():
64
- async with async_playwright() as playwright:
65
- browser = await playwright.chromium.launch(headless=browser_headless)
66
- context = await browser.new_context(storage_state=aliyundrive_cookie_file)
67
- page = await context.new_page()
68
- task = asyncio.create_task(sign(page))
69
- await asyncio.gather(task)
70
- # 退出
71
- await page.close()
72
- await browser.close()
73
- # 推送
74
- result = task.result()
75
- push_msg(aliyundrive_title, "\n".join([result]))
76
-
77
-
78
- if __name__ == "__main__":
79
- asyncio.run(main())
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
_playwright/bilibili.py CHANGED
@@ -7,7 +7,7 @@ from os.path import abspath, dirname, join
7
  from playwright.async_api import async_playwright
8
 
9
  sys.path.append(join(dirname(abspath(__file__)), "../"))
10
- from utils import push_msg, get_bilibili_live_rooms_from_pi
11
  from __init__ import (
12
  browser_headless,
13
  browser_proxy,
@@ -19,102 +19,112 @@ from __init__ import (
19
  bilibili_logger,
20
  bilibili_img,
21
  )
 
 
 
 
 
 
 
 
 
 
 
22
 
23
 
24
  # 判断登录状态
25
- async def is_login(page):
26
  await page.goto(bilibili_url)
27
- if await page.get_by_text("修改资料").is_visible(timeout=5000):
28
- bilibili_logger.info("登录成功")
29
  return True
30
  else:
31
- stderr = "Cookie 过期"
32
- bilibili_logger.error(stderr)
33
- push_msg(bilibili_title, stderr, bilibili_img)
34
  return False
35
 
36
 
37
  # 签到
38
- async def sign(page):
39
- msg = []
40
 
41
  if not await is_login(page):
42
- return "bilibili_not_login"
43
 
44
  await page.goto(bilibili_sign_url)
45
- if await page.get_by_text("无法重复签到").is_visible():
46
- sign_res = f"签到时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n签到状态:今日已签到"
47
  bilibili_logger.info(sign_res)
48
- msg.append(sign_res)
49
- elif await page.get_by_text('"code":0').is_visible():
50
- sign_res = f"签到时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n签到状态:签到成功"
51
  bilibili_logger.info(sign_res)
52
- msg.append(sign_res)
53
  else:
54
- sign_res = f"签到失败"
55
  bilibili_logger.error(sign_res)
56
- push_msg(bilibili_title, sign_res, bilibili_img)
57
- msg.append(sign_res)
58
 
59
- return "\n".join(msg)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
 
61
 
62
  # 直播间打卡
63
- async def live(page):
64
- msg = []
 
 
 
65
 
66
  bilibili_live_rooms = await get_bilibili_live_rooms_from_pi()
67
  for room_id in list(bilibili_live_rooms.keys()):
68
  await page.goto(f"{bilibili_live_url}/{str(room_id)}")
69
- # 输入框选择 xpath 绝对定位
70
- input_box = page.locator(
71
- "xpath=/html/body/div[3]/main/div[1]/section[1]/div[3]/div[12]/div/div[2]/div[2]/textarea",
72
- )
73
  # 输入内容
74
  await input_box.fill("1")
75
  # 发送按钮
76
- send_button = page.locator(
77
- "xpath=/html/body/div[3]/main/div[1]/section[1]/div[3]/div[12]/div/div[3]/div/button/span"
78
- )
79
- if await send_button.is_visible():
80
- # 点击发送按钮
81
  await send_button.click()
82
- room_msg = f"直播间:【{bilibili_live_rooms[room_id]}】打卡成功,打卡时间:【{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}】"
83
- bilibili_logger.info(room_msg)
84
  else:
85
- room_msg = f"直播间:【{bilibili_live_rooms[room_id]}】打卡失败,打卡时间:【{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}】"
86
- bilibili_logger.error(room_msg)
87
- msg.append(room_msg)
88
 
89
- return "\n".join(msg)
90
 
91
 
92
- async def bilibili_sign():
93
  async with async_playwright() as playwright:
94
  browser = await playwright.firefox.launch(headless=browser_headless)
95
  context = await browser.new_context(storage_state=bilibili_cookie_file)
96
- # 签到
97
- sign_page = await context.new_page()
98
- sign_task = asyncio.create_task(sign(sign_page))
99
- await asyncio.gather(sign_task)
100
- await sign_page.close()
101
  # 直播间打卡
102
- live_page = await context.new_page()
103
- live_task = asyncio.create_task(live(live_page))
104
- await asyncio.gather(live_task)
105
- await live_page.close()
106
  # 退出
107
  await browser.close()
108
  # 推送
109
- sign_result = sign_task.result()
110
- live_result = live_task.result()
111
- # ""分割两个服务的消息
112
- push_msg(
113
- title=bilibili_title,
114
- message="\n".join([sign_result, "", live_result]),
115
- img_url=bilibili_img,
116
- )
117
 
118
 
119
  if __name__ == "__main__":
120
  asyncio.run(bilibili_sign())
 
 
7
  from playwright.async_api import async_playwright
8
 
9
  sys.path.append(join(dirname(abspath(__file__)), "../"))
10
+ from utils import push_msg
11
  from __init__ import (
12
  browser_headless,
13
  browser_proxy,
 
19
  bilibili_logger,
20
  bilibili_img,
21
  )
22
+ from option_mysql import get_aiomysql_instance
23
+
24
+
25
+ async def get_bilibili_live_rooms_from_pi() -> dict:
26
+ sql = f"SELECT room_id, username FROM live_rooms"
27
+ pool = await get_aiomysql_instance()
28
+ sql_data = await pool.query(sql)
29
+ bilibili_live_rooms = {}
30
+ for sd in sql_data:
31
+ bilibili_live_rooms[sd["room_id"]] = sd["username"]
32
+ return bilibili_live_rooms
33
 
34
 
35
  # 判断登录状态
36
+ async def is_login(page) -> bool:
37
  await page.goto(bilibili_url)
38
+ if await page.get_by_text("每日奖励", exact=True).is_enabled():
39
+ login_res = bilibili_logger.info("Cookie 有效")
40
  return True
41
  else:
42
+ login_res = "Cookie 失效"
43
+ bilibili_logger.error(login_res)
 
44
  return False
45
 
46
 
47
  # 签到
48
+ async def sign(page) -> list:
49
+ message = [f"签到时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"]
50
 
51
  if not await is_login(page):
52
+ return "Cookie 失效"
53
 
54
  await page.goto(bilibili_sign_url)
55
+ if await page.get_by_text("今日已签到").is_enabled():
56
+ sign_res = f"签到状态:今日已签到"
57
  bilibili_logger.info(sign_res)
58
+ elif await page.get_by_text('"code":0').is_enabled():
59
+ sign_res = f"签到状态:签到成功"
 
60
  bilibili_logger.info(sign_res)
 
61
  else:
62
+ sign_res = f"签到状态:签到失败"
63
  bilibili_logger.error(sign_res)
64
+ message.append(sign_res)
65
+ return message
66
 
67
+
68
+ async def bilibili_sign():
69
+ async with async_playwright() as playwright:
70
+ browser = await playwright.firefox.launch(headless=browser_headless)
71
+ context = await browser.new_context(storage_state=bilibili_cookie_file)
72
+ # 签到
73
+ page = await context.new_page()
74
+ task = asyncio.create_task(sign(page))
75
+ await asyncio.gather(task)
76
+ await page.close()
77
+ # 退出
78
+ await browser.close()
79
+ # 推送
80
+ message = "\n".join(task.result())
81
+ push_msg(title=bilibili_title, message=message, img_url=bilibili_img)
82
 
83
 
84
  # 直播间打卡
85
+ async def live(page) -> list:
86
+ message = [f"打卡时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"]
87
+
88
+ if not await is_login(page):
89
+ return "Cookie 失效"
90
 
91
  bilibili_live_rooms = await get_bilibili_live_rooms_from_pi()
92
  for room_id in list(bilibili_live_rooms.keys()):
93
  await page.goto(f"{bilibili_live_url}/{str(room_id)}")
94
+ # 输入框
95
+ input_box = page.get_by_role("textbox", name="发个弹幕呗~")
 
 
96
  # 输入内容
97
  await input_box.fill("1")
98
  # 发送按钮
99
+ send_button = page.get_by_role("button", name="发送")
100
+ if await send_button.is_enabled():
 
 
 
101
  await send_button.click()
102
+ room_res = f"直播间:【{bilibili_live_rooms[room_id]}】打卡成功"
103
+ bilibili_logger.info(room_res)
104
  else:
105
+ room_res = f"直播间:【{bilibili_live_rooms[room_id]}】打卡失败】"
106
+ bilibili_logger.error(room_res)
107
+ message.append(room_res)
108
 
109
+ return message
110
 
111
 
112
+ async def bilibili_live():
113
  async with async_playwright() as playwright:
114
  browser = await playwright.firefox.launch(headless=browser_headless)
115
  context = await browser.new_context(storage_state=bilibili_cookie_file)
 
 
 
 
 
116
  # 直播间打卡
117
+ page = await context.new_page()
118
+ task = asyncio.create_task(live(page))
119
+ await asyncio.gather(task)
120
+ await page.close()
121
  # 退出
122
  await browser.close()
123
  # 推送
124
+ message = "\n".join(task.result())
125
+ push_msg(title=bilibili_title, message=message, img_url=bilibili_img)
 
 
 
 
 
 
126
 
127
 
128
  if __name__ == "__main__":
129
  asyncio.run(bilibili_sign())
130
+ asyncio.run(bilibili_live())
_requests/[no_use]restart_vits_server.py DELETED
@@ -1,62 +0,0 @@
1
- # coding:utf-8
2
-
3
- import os
4
- import re
5
- import requests
6
-
7
- from os.path import abspath, dirname, join
8
-
9
- # conf
10
- title = "Huggingface"
11
- session = requests.Session()
12
-
13
- # from utils import push_msg
14
-
15
-
16
- def restart_vits_server():
17
- headers = {
18
- "authority": "huggingface.co",
19
- "origin": "https://huggingface.co",
20
- "referer": "https://huggingface.co/login",
21
- "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",
22
- }
23
- data = {
24
- "username": os.environ.get("hf_username"),
25
- "password": os.environ.get("hf_password"),
26
- }
27
- session.post("https://huggingface.co/login", headers=headers, data=data)
28
- rsp = session.get(
29
- "https://huggingface.co/spaces/evi0mo/vits-fastapi-server/settings"
30
- )
31
- csrf = re.findall(r"name=\"csrf\" value=\"(.*?)\">", rsp.text)[0]
32
-
33
- res = "init"
34
- restart_headers = {
35
- "authority": "huggingface.co",
36
- "origin": "https://huggingface.co",
37
- "referer": "https://huggingface.co/spaces/evi0mo/vits-fastapi-server/settings",
38
- "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",
39
- }
40
-
41
- restart_data = {"csrf": csrf}
42
- session.post(
43
- "https://huggingface.co/spaces/evi0mo/vits-fastapi-server/restart?factory=false",
44
- headers=restart_headers,
45
- data=restart_data,
46
- )
47
- # check
48
- check = session.get(
49
- "https://huggingface.co/api/spaces/evi0mo/vits-fastapi-server/runtime"
50
- )
51
- if check.json()["stage"] == "RUNNING_BUILDING":
52
- res = "success"
53
- vits_logger.info(res)
54
- else:
55
- res = "failed"
56
- vits_logger.error(res)
57
-
58
- # push_msg(title, res)
59
-
60
-
61
- if __name__ == "__main__":
62
- restart_vits_server()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
_requests/aliyundrive.py CHANGED
@@ -8,11 +8,7 @@ from os.path import abspath, dirname, join
8
 
9
  # conf
10
  sys.path.append(join(dirname(abspath(__file__)), "../"))
11
- from utils import (
12
- push_msg,
13
- get_aliyundrive_refresh_token,
14
- update_aliyundrive_access_token,
15
- )
16
  from __init__ import (
17
  aliyundrive_nickname_url,
18
  aliyundrive_signin_url,
@@ -22,6 +18,7 @@ from __init__ import (
22
  aliyundrive_logger,
23
  aliyundrive_img,
24
  )
 
25
 
26
  # session
27
  headers = {"message-Type": "application/json"}
@@ -34,6 +31,26 @@ def get_refresh_token():
34
  pass
35
 
36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  async def validate_access_token():
38
  # token只有三小时有效期,所以定时任务刷新间隔为三小时
39
  # 从树莓派获取 refresh_token
@@ -97,8 +114,8 @@ def sign():
97
  # 当天签到获得的奖励信息
98
  reward_name = current_sign_info["reward"]["name"]
99
  reward_description = current_sign_info["reward"]["description"]
100
- curent_reward = f"{reward_name}{reward_description}"
101
- # 是否已领取奖励,bool
102
  is_reward = current_sign_info["isReward"]
103
  return is_reward, signin_count, curent_reward
104
  return False
 
8
 
9
  # conf
10
  sys.path.append(join(dirname(abspath(__file__)), "../"))
11
+ from utils import push_msg
 
 
 
 
12
  from __init__ import (
13
  aliyundrive_nickname_url,
14
  aliyundrive_signin_url,
 
18
  aliyundrive_logger,
19
  aliyundrive_img,
20
  )
21
+ from option_mysql import get_aiomysql_instance
22
 
23
  # session
24
  headers = {"message-Type": "application/json"}
 
31
  pass
32
 
33
 
34
+ async def get_aliyundrive_refresh_token():
35
+ sql = f"SELECT token FROM aliyundrive WHERE id=1"
36
+ pool = await get_aiomysql_instance()
37
+ data = await pool.query(sql)
38
+ if data:
39
+ aliyundrive_logger.info("获取阿里云盘 refresh_token 成功")
40
+ return data[0]["token"]
41
+ return False
42
+
43
+
44
+ async def update_aliyundrive_access_token(access_token):
45
+ sql = f"UPDATE aliyundrive SET token=%s WHERE id=2"
46
+ pool = await get_aiomysql_instance()
47
+ data = await pool.update(sql, [access_token])
48
+ if data:
49
+ aliyundrive_logger.info("update aliyundrive access token")
50
+ return True
51
+ return False
52
+
53
+
54
  async def validate_access_token():
55
  # token只有三小时有效期,所以定时任务刷新间隔为三小时
56
  # 从树莓派获取 refresh_token
 
114
  # 当天签到获得的奖励信息
115
  reward_name = current_sign_info["reward"]["name"]
116
  reward_description = current_sign_info["reward"]["description"]
117
+ curent_reward = f"{reward_name}{reward_description}"
118
+ # 是否已领取奖励
119
  is_reward = current_sign_info["isReward"]
120
  return is_reward, signin_count, curent_reward
121
  return False
api.py CHANGED
@@ -11,7 +11,7 @@ from apscheduler.schedulers.background import BackgroundScheduler
11
  from apscheduler.schedulers.asyncio import AsyncIOScheduler
12
  from loguru import logger
13
 
14
- from _playwright.bilibili import bilibili_sign
15
  from _playwright.v2ex import v2ex_sign
16
  from _playwright.vits import vits_sign
17
  from _playwright.tsdm import tsdm_sign
@@ -28,15 +28,18 @@ def run_scheduler(loop):
28
  # add task
29
  task = AsyncIOScheduler()
30
  task.configure(timezone=pytz.timezone("Asia/Shanghai"))
 
31
  task.add_job(
32
- tick,
33
  "cron",
34
- hour="*/2",
 
35
  next_run_time=datetime.now(),
36
- coalesce=True
 
37
  )
38
  task.add_job(
39
- bilibili_sign,
40
  "cron",
41
  hour=6,
42
  minute=1,
@@ -105,9 +108,7 @@ def run_scheduler(loop):
105
 
106
 
107
  def start_daemon_scheduler(loop):
108
- t = threading.Thread(
109
- target=run_scheduler, args=(loop,), name="schedule", daemon=True
110
- )
111
  t.start()
112
 
113
 
 
11
  from apscheduler.schedulers.asyncio import AsyncIOScheduler
12
  from loguru import logger
13
 
14
+ from _playwright.bilibili import bilibili_sign, bilibili_live
15
  from _playwright.v2ex import v2ex_sign
16
  from _playwright.vits import vits_sign
17
  from _playwright.tsdm import tsdm_sign
 
28
  # add task
29
  task = AsyncIOScheduler()
30
  task.configure(timezone=pytz.timezone("Asia/Shanghai"))
31
+ task.add_job(tick, "cron", hour="*/2", next_run_time=datetime.now(), coalesce=True)
32
  task.add_job(
33
+ bilibili_sign,
34
  "cron",
35
+ hour=6,
36
+ minute=1,
37
  next_run_time=datetime.now(),
38
+ coalesce=True,
39
+ misfire_grace_time=60 * 60 * 12,
40
  )
41
  task.add_job(
42
+ bilibili_live,
43
  "cron",
44
  hour=6,
45
  minute=1,
 
108
 
109
 
110
  def start_daemon_scheduler(loop):
111
+ t = threading.Thread(target=run_scheduler, args=(loop,), name="schedule", daemon=True)
 
 
112
  t.start()
113
 
114
 
utils.py CHANGED
@@ -105,7 +105,7 @@ def push_msg(title: str = "无标题", message: str = "无内容", img_url: str
105
  "message": message,
106
  "priority": 10,
107
  "extras": {
108
- "client::display": {"contentType": "text/markdown"},
109
  "client::notification": {"bigImageUrl": img_url},
110
  },
111
  }
@@ -113,16 +113,6 @@ def push_msg(title: str = "无标题", message: str = "无内容", img_url: str
113
  return {"code": resp.status_code, "res": resp.content}
114
 
115
 
116
- async def get_bilibili_live_rooms_from_pi() -> dict:
117
- sql = f"SELECT room_id, username FROM live_rooms"
118
- pool = await get_aiomysql_instance()
119
- data = await pool.query(sql)
120
- bilibili_live_rooms = {}
121
- for d in data:
122
- bilibili_live_rooms[d["room_id"]] = d["username"]
123
- return bilibili_live_rooms
124
-
125
-
126
  async def get_cookie_from_pi() -> dict:
127
  sql = f"SELECT cookie_name, cookie_value FROM cookie"
128
  pool = await get_aiomysql_instance()
@@ -134,26 +124,6 @@ async def get_cookie_from_pi() -> dict:
134
  return data[0]["cookie_name"]
135
 
136
 
137
- async def get_aliyundrive_refresh_token():
138
- sql = f"SELECT token FROM aliyundrive WHERE id=1"
139
- pool = await get_aiomysql_instance()
140
- data = await pool.query(sql)
141
- if data:
142
- logger.info("获取阿里云盘 refresh_token 成功")
143
- return data[0]["token"]
144
- return False
145
-
146
-
147
- async def update_aliyundrive_access_token(access_token):
148
- sql = f"UPDATE aliyundrive SET token=%s WHERE id=2"
149
- pool = await get_aiomysql_instance()
150
- data = await pool.update(sql, [access_token])
151
- if data:
152
- logger.info("update aliyundrive access token")
153
- return True
154
- return False
155
-
156
-
157
  async def read_logfile(log_file: str) -> str:
158
  async with aiofiles.open(log_file, mode="r", encoding="utf-8") as f:
159
  data = await f.read()
@@ -183,7 +153,4 @@ async def main():
183
  if __name__ == "__main__":
184
  logger.debug(f"DEBUG Mode: {DEBUG}")
185
  logger.debug(f"DIR_PATH: {DIR_PATH}")
186
- logger.debug(f"get_pi_ip: {get_pi_ip(gotify_host)}")
187
- logger.debug(f'get_domain: {get_domain("https://github.com")}')
188
- logger.debug(f'push_msg: {push_msg("utils.py", "hello world")}')
189
  # asyncio.run(main())
 
105
  "message": message,
106
  "priority": 10,
107
  "extras": {
108
+ "client::display": {"contentType": "text/plaintext"},
109
  "client::notification": {"bigImageUrl": img_url},
110
  },
111
  }
 
113
  return {"code": resp.status_code, "res": resp.content}
114
 
115
 
 
 
 
 
 
 
 
 
 
 
116
  async def get_cookie_from_pi() -> dict:
117
  sql = f"SELECT cookie_name, cookie_value FROM cookie"
118
  pool = await get_aiomysql_instance()
 
124
  return data[0]["cookie_name"]
125
 
126
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  async def read_logfile(log_file: str) -> str:
128
  async with aiofiles.open(log_file, mode="r", encoding="utf-8") as f:
129
  data = await f.read()
 
153
  if __name__ == "__main__":
154
  logger.debug(f"DEBUG Mode: {DEBUG}")
155
  logger.debug(f"DIR_PATH: {DIR_PATH}")
 
 
 
156
  # asyncio.run(main())