python写签到软件_第一个实用python程序——自动填写工作日志、签到

刚刚把文章重看了一遍,自己给的评价就是:闲的没事干了?

1. 前言

一直苦于每天要分上下午两次写工作日志(不太能理解单位某些部门的脑洞……一天一次不行么?噢……噢噢,好吧,你们抄的模板就是分上下午的,不怪你们了),而现在正在看的Python做这些自动化的工作属于python擅长的部分,于是花了半天时间写了相关代码,经测试基本成功(文后放出)。因为每周工作日内容都差不多,只要判断下当天是周几,把周几上午/下午的文本粘贴进去就可以了,所以程序很简单。

代码什么的都是别人现成的轮子,拿来照着改改就是了,没什么优点可言。缺点是大把的:不够精简,基本只是顺序结构,连个循环都没有。。。。鉴于目前的思路是够用就好,所以……对于程序这部分,边学边改吧。

这里要记录的是初用Python踏过的坑,为了填坑,花的时间比写代码的时间要长的多,为了让自己今后不再犯,另外也给遇到相似经历的初学者们一点解决的方案,故留此文。

说明下环境:Windows 10 + Python3 + Pychram 2017.3 + firefox

(在windows下编程,微软分分钟教你做人)

2. 程序构成

第一部分,自动登陆工作日志网站,根据周几自动填写当天工作日志;

第二部分,自动登陆什么值得买,在大妈家签到;

第三部分,自动给自己邮箱发条邮件,告诉自己任务已完成。

2.1 自动填写日志部分遇到的坑

使用pip进行安装selenium,按之前自己学的,pip是啥都不知道。。。。需要在cmd中使用pip命令安装。装不上?是不是path没有对?

关于Path,Windows 10中不需要加;,要建立在Path中。python安装的时候一定要记得把path那一项选上。

firefox是firefox 不是firfox

不是安装好selenium就可以使用了,还要在官网下载firefox对应的驱动,并且把这个驱动路径也加入Path才能调用!

如果还是selenium不可用,提示:# no module named 'selenium'需要调Pychram中设置,具体可参考:https://www.cnblogs.com/lovexin/p/8612197.html

2.2 自动登陆什么值得买遇到的坑

由于前序自己登陆工作日志网站,在此处基本没有遇到坑。(顽皮)

需要通过firefox的查看元素,慢慢找对应的签到按钮的元素,不是by id,而是by class name,也是可以找到的。

在网页上签到似乎只能签到,不能领积分/补签什么的,还得到手机上操作下,宝宝心里苦。。。。

2.3 自动给自己邮箱发邮件遇到的坑

一开始使用的是126邮箱发送邮件,发完三条测试邮件之后再怎么发都显示失败,开始绑定手机,使用安全密码……泥煤的除了在126自家的邮箱大师上能发邮件,第三方邮件app全阵亡,提示发送失败。这个原因查了好长时间,后来分析,估计126把我当spam了,才发几条给自己的邮件就封,你也太狠了吧。好吧,转向鹅厂,搞了一半突然灵光乍现,为毛不用139邮箱呢?也有smtp,收到邮件还“bang~”给你手机发个短信说邮件收到啦邮件收到啦。于是现在每天点完“执行”按钮后,等着收短信,还是狠开心滴。

期间遇到一件奇怪的事情,明明使用的126邮箱配置信息,但企鹅邮箱里收到了一封自己qq邮箱发给自己qq邮箱的测试邮件,实在莫名啊。

在想到使用139邮箱之前,还考虑过使用微信提醒。需要pip装itchat。装好之后发觉达不成自己要的目标,弃用。但似乎可以做不少事情。

3. 现在遇到的问题,今后计划的方案:

firefox启动太慢。每次使用都要磨磨蹭蹭半天firefox才能出来。今后考虑是不是可以不用UI界面,所有这些后台解决。

firefox加载太慢。页面打开了99%,就一个无所谓的小图片或者什么元素的没有加载完成,就是不进行下一步。之前查资料说有什么隐形加载什么的,可以加以改进。

程序代码傻大粗……还能说啥,慢慢改呗。

每次都要点太麻烦,后续打算搞下树莓派,每天下午三点自动运行,酱紫,今后就等着收短信就好了。——世界是懒人推动的!

利用树莓派做个服务器跑下WP,嗯,当然需要用frp做个内网穿透。

4. 代码:

# 1. 工作日志填写

# 2. 张大妈签到

# 3. 发邮件汇报成功

# 0. 导入各种包

import time

import os

import smtplib

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

from email.mime.text import MIMEText

from email.header import Header

# 1. 工作日志填写

# 选择浏览器

browser = webdriver.Firefox()

browser.get('http://此处为网址马赛克')

# 检查并输入用户名和密码,然后登陆

user = browser.find_element_by_id("username") #审查元素username的id

user.send_keys("此处为账号马赛克") #输入账号

password = browser.find_element_by_name("password") #审查元素password的name

password.send_keys("此处为密码马赛克") #输入密码

user.send_keys(Keys.RETURN) #实现自动点击登陆

# 登陆输入日志界面

browser.get('http://此处为网址2马赛克') # 手动“跳转”

# 查找并输入当前日期

date_now = browser.find_element_by_id("ctl00_MainContent_S_Time")

date_now.send_keys(time.strftime("%Y-%m-%d", time.localtime()))

# 啥都不做,默认选择“上午”

# 以下根据星期判断输入的内容

user = browser.find_element_by_id("ctl00_MainContent_TextBox1") #审查元素username的id

time_week = time.strftime("%w",time.localtime())

if time_week == "1" :

user.send_keys("周一任务马赛克") # 输入当日工作日志内容

elif time_week == "2":

user.send_keys("周二任务马赛克") # 输入当日工作日志内容

elif time_week == "3":

user.send_keys("周三任务马赛克") # 输入当日工作日志内容

elif time_week == "4":

user.send_keys("周四任务马赛克") # 输入当日工作日志内容

elif time_week == "5":

user.send_keys("周五任务马赛克") # 输入当日工作日志内容

else:

user.send_keys("") # 输入当日工作日志内容

# 点击按钮,提交日志

browser.find_element_by_id("ctl00_MainContent_Button1").click()

# 重新进入输入日志界面,刷新

browser.get('http://此处为网址2马赛克')

# 查找并输入当前日期

date_now = browser.find_element_by_id("ctl00_MainContent_S_Time")

date_now.send_keys(time.strftime("%Y-%m-%d", time.localtime()))

# 选择“下午”

browser.find_element_by_id("ctl00_MainContent_RadioButtonList1_1").click()

# 以下根据星期判断输入的内容

user = browser.find_element_by_id("ctl00_MainContent_TextBox1") #审查元素username的id

time_week = time.strftime("%w",time.localtime())

if time_week == "1" :

user.send_keys("周一任务马赛克") # 输入当日工作日志内容

elif time_week == "2":

user.send_keys("周二任务马赛克") # 输入当日工作日志内容

elif time_week == "3":

user.send_keys("周三任务马赛克") # 输入当日工作日志内容

elif time_week == "4":

user.send_keys("周四任务马赛克") # 输入当日工作日志内容

elif time_week == "5":

user.send_keys("周五任务马赛克") # 输入当日工作日志内容

else:

user.send_keys("") # 输入当日工作日志内容

# 点击按钮,提交日志

browser.find_element_by_id("ctl00_MainContent_Button1").click()

print("工作日志填写成功")

# 2. 张大妈签到

# 输入网址

browser.get('https://zhiyou.smzdm.com/user/login?redirect_to=https://post.smzdm.com/tougao/')

# 检查并输入用户名和密码,然后登陆

user = browser.find_element_by_id("username") #审查元素username的id

user.send_keys("账号马赛克") #输入账号

password = browser.find_element_by_name("password") #审查元素password的name

password.send_keys("密码马赛克") #输入密码

user.send_keys(Keys.RETURN) #实现自动点击登陆

time.sleep(2)

browser.get('https://www.smzdm.com/')

button_click = browser.find_element_by_class_name("J_punch").click()

time.sleep(2)

button_click = browser.find_element_by_class_name("J_punch").click()

print("张大妈签到成功")

# 3. 发邮件汇报成功

# 第三方 SMTP 服务

mail_host = "smtp.139.com" # 设置服务器

mail_user = "邮箱名马赛克" # 用户名

mail_pass = "邮箱密码马赛克" # 口令

sender = '发送邮箱马赛克'

receivers = ['接收邮箱马赛克'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

message = MIMEText('今日任务已完成,OK', 'plain', 'utf-8')

message['From'] = Header("发送邮箱马赛克", 'utf-8')

message['To'] = Header("接收邮箱马赛克", 'utf-8')

subject = time.strftime("%Y-%m-%d", time.localtime()) + " 任务已完成,大佬请放心!"

message['Subject'] = Header(subject, 'utf-8')

try:

smtpObj = smtplib.SMTP()

smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号

smtpObj.login(mail_user, mail_pass)

smtpObj.sendmail(sender, receivers, message.as_string())

print("邮件发送成功")

except smtplib.SMTPException:

print("Error: 无法发送邮件")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值