1 问题需求
登陆Dukou网站,点击签到按钮,每天执行此操作。
2 解决
解决方法有两个:
- 利用selenium编写浏览器爬虫,模拟执行操作;然后利用Windows自带的
任务计划程序
实现定时执行爬虫;
- 编写ios快捷指令
2.1 Windows自动执行
2.1.1 爬虫脚本
参考:python用selenium爬取百度搜索结果
dukou_sign_in.py:
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
| from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By
def dukou_sign(): co = webdriver.ChromeOptions() co.headless = False browser = webdriver.Chrome(options=co)
browser.implicitly_wait(20) url = 'https://dukou.icu/user/index' browser.get(url) sleep(5) username = "xxx" password = "xxx" browser.find_element(by=By.ID, value="email").send_keys(username) browser.find_element(by=By.ID, value="passwd").send_keys(password) browser.find_element(by=By.XPATH, value='//*[@id="formLogin"]/div[3]/div/div/span/button').click()
sleep(5) browser.find_element(by=By.XPATH, value='//*[@id="app"]/section/section/main/div/div[2]/div/div/div/div[2]/div[3]' '/div/div/button[1]').click() browser.quit()
if __name__ == "__main__": dukou_sign()
|
selenium打开指定URL后,需要登陆:
在此页面按F12,找到对应输入框的id
然后通过ID定位element,并发送对应内容:
1 2
| browser.find_element(by=By.ID, value="email").send_keys(username) browser.find_element(by=By.ID, value="passwd").send_keys(password)
|
下一步点击确定
按钮,通过XPATH定位element,并进行点击:
1
| browser.find_element(by=By.XPATH, value='//*[@id="formLogin"]/div[3]/div/div/span/button').click()
|
登陆后,点击签到
按钮与上面点击确定
按钮类似:
1 2
| browser.find_element(by=By.XPATH, value='//*[@id="app"]/section/section/main/div/div[2]/div/div/div/div[2]/div[3]' '/div/div/button[1]').click()
|
2.1.2 消息通知脚本
爬虫脚本执行完,需要消息提醒,提高体验。
通过 win10toast 实现在 Win10 系统中发送桌面消息通知,参考
安装 win10toast:
代码:
1 2 3 4 5 6 7 8 9 10 11
| from win10toast import ToastNotifier
toaster = ToastNotifier() toaster.show_toast("Dukou自动签到", "签到成功!", icon_path="./img/dukou.ico", duration=60*60*6)
if __name__ == "__main__": pass
|
但是这种方法发送的消息会在一定的时间内消失(由参数duration
指定,单位是秒),不会在管理通知
中保存;如果将参数duration
改的足够大,消息可以"永存",但是后台会持续运行该程序,不太理想。
下面的程序解决了上面的问题,参考how to storage notifications into Action center
dukou_notice.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| from winrt.windows.ui.notifications import ToastNotificationManager, ToastNotification import winrt.windows.data.xml.dom as dom
notifier = ToastNotificationManager.create_toast_notifier(r'D:\developer\Python\python399\python.exe')
title = "Dukou自动签到" desp = "签到成功!" tString = """<toast duration='short'><audio src = 'ms-winsoundevent:Notification.Reminder' loop = 'false' silent = 'false'/><visual><binding template='ToastText02'><text id="1">""" + title + """</text><text id="2">""" + desp + """</text></binding></visual></toast>"""
xDoc = dom.XmlDocument() xDoc.load_xml(tString) notifier.show(ToastNotification(xDoc))
if __name__ == "__main__": pass
|
注意:dukou_notice.py
脚本不能与 dukou_sign_in.py
脚本合在一个文件内,否则会报错:
1 2
| _winrt.init_apartment() RuntimeError: 无法在设置线程模式后对其加以更改。
|
2.1.3 定时执行脚本
使用Windows自带的任务计划程序
实现定时执行脚本,具体参考 Window自带的定时自动执行程序
-
在Windows搜索框输入任务计划程序
找到这个软件并打开;
-
点击创建任务
:
-
常规
部分,填写名称
,勾选不管用户是否登录都要运行
以及 使用最高权限运行
:
-
触发器
部分,选择合适的触发条件:
-
操作
部分,这里运行的程序或者脚本,最好直接选择个bat来执行(bat名称和路径分开放),执行exe有时候会出错,bat里设置的是要执行的Python脚本(bat与python脚本同目录下):
dukou.bat:
1 2
| python dukou_sign_in.py python dukou_notice.py
|
-
条件
和设置
部分默认即可,然后点击确定即可,前端界面已经出现了设置的任务:
-
到此已经完成问题需求。
2.2 ios快捷指令(未实现)