File size: 3,877 Bytes
65d3d39
 
 
 
 
 
 
 
 
 
20360a6
65d3d39
 
 
 
 
 
 
 
 
 
 
6ed2c3e
65d3d39
 
 
e694d87
 
 
 
 
 
 
65d3d39
 
 
e694d87
858343f
65d3d39
 
 
 
 
6ed2c3e
65d3d39
 
 
 
 
 
 
 
 
 
 
e694d87
 
65d3d39
 
 
 
5cef9c4
20360a6
 
 
 
 
65d3d39
 
 
 
 
 
 
 
e694d87
65d3d39
 
 
 
 
 
 
 
5cf3f91
895c055
58c0fbc
895c055
 
 
 
 
58c0fbc
5cef9c4
e694d87
858343f
58c0fbc
858343f
65d3d39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e694d87
65d3d39
 
 
 
 
 
 
 
 
 
6ed2c3e
65d3d39
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# coding:utf-8
import sys
import random
import asyncio

from os.path import abspath, dirname, join
from playwright.async_api import async_playwright

sys.path.append(join(dirname(abspath(__file__)), "../"))

from utils import push_msg, get_streevoice_today_song
from __init__ import (
    browser_headless,
    browser_proxy,
    tsdm_url,
    tsdm_sign_url,
    tsdm_cliwork_url,
    tsdm_plugin_id,
    tsdm_minds,
    tsdm_cookie_file,
    tsdm_title,
    tsdm_logger,
    tsdm_img,
)


# on 监听弹窗事件
async def close_popup(popup):
    # await popup.wait_for_load_state()
    print(await popup.title())
    await popup.close()


# 判断登录状态
async def is_login(page):
    await page.goto(tsdm_url)
    await page.wait_for_load_state()
    if await page.locator("#pm_ntc").is_enabled():  # 消息按钮
        tsdm_logger.info("登录成功")
        return True
    else:
        stderr = "Cookie 过期"
        tsdm_logger.error(stderr)
        push_msg(tsdm_title, stderr, tsdm_img)
    return False


# 签到
async def sign(page):
    msg = []

    if not await is_login(page):
        return "tsdm_not_login"

    await page.goto(tsdm_sign_url)

    if await page.get_by_text("今天已签到").is_visible():
        sign_res = "今天已签到"
        tsdm_logger.info(sign_res)
        msg.append(sign_res)
    else:
        song = await get_streevoice_today_song(page)
        mind = random.choice(list(tsdm_minds.keys()))
        tsdm_logger.info(f"签到心情选择:{tsdm_minds[mind]}")
        await page.get_by_role("combobox").select_option(mind)
        await page.get_by_label("自己填写").check()  # 不想填写
        await page.locator("#todaysay").type(song, delay=200)
        await page.get_by_text("点我签到!").click()
        sign_res = "签到成功"
        tsdm_logger.info(sign_res)
        msg.append(sign_res)

    return "\n".join(msg)


# 打工
async def cliwork(page):
    msg = []

    if not await is_login(page):
        return "tsdm_not_login"

    await page.goto(tsdm_url)  # 切换回电脑版
    await page.goto(tsdm_cliwork_url)

    # 已经打工会跳转回首页
    if await page.get_by_text("需要等待").is_visible(timeout=3) or await page.get_by_text("欢迎新会员").is_visible(timeout=3):
        has_work = "今天已打工"
        tsdm_logger.info(has_work)
        msg.append(has_work)
    else:
        await page.locator("#workstart").is_enabled()
        for pid in tsdm_plugin_id:
            await page.locator(f"#np_advid{pid}").get_by_role("link").click()
            page.on("popup", close_popup)  # handle popup 不能 await

        await page.pause()
        await page.bring_to_front()  # 回到第一个标签页
        await page.locator("#workstart").click()  # 领取奖励
        work_res = "打工成功"
        tsdm_logger.info(work_res)
        msg.append(work_res)

    return "\n".join(msg)


async def tsdm_sign():
    async with async_playwright() as playwright:
        browser = await playwright.chromium.launch(headless=browser_headless)
        context = await browser.new_context(storage_state=tsdm_cookie_file)
        # 签到
        sign_page = await context.new_page()
        sign_task = asyncio.create_task(sign(sign_page))
        await asyncio.gather(sign_task)
        await sign_page.close()
        # # 打工
        cliwork_page = await context.new_page()
        cliwork_task = asyncio.create_task(cliwork(cliwork_page))
        await asyncio.gather(cliwork_task)
        await cliwork_page.close()
        # 退出
        await browser.close()
        # 推送
        sign_result = sign_task.result()
        cliwork_result = cliwork_task.result()
        # ""分割两个服务的消息
        push_msg(tsdm_title, "\n".join([sign_result, "", cliwork_result]), tsdm_img)


if __name__ == "__main__":
    asyncio.run(tsdm_sign())