基于selenium与itchat模块的自动打卡签到签出python代码示例
2018-09-11 09:48
841 查看
版权声明:辛苦原创,请勿盗取。 https://blog.csdn.net/shuryuu/article/details/82620602
项目介绍:
这个脚本在我刚来上班的时候就想写,明明每天都要滴卡上下班,为什么还要搞个网页每天签入签出呢,一不小心忘了还要扣工资,这不合理,必须得治,基于刚来的时候只会写java,写起来太费时间了,而且我java写的不咋地,也就放弃了,后来自学了python,直到前几天,我接触到了selenium模块,好用的一批,对于大数据量的网页操作来说还是爬虫框架比较好用,但对于公司这种签到签出网页,对于反爬虫策略可是做的足足的,所以我选择利用最简单的方法,实现目标即可,本来我还写了一个发送命令行,可以实现微信操作电脑cmd的,我觉得没啥用,而且让我的小脚本变得太臃肿,然后删掉了,需要的话,可以联系我发源码。
主要采用了selenium与itchat模块,itchat是利用微信与电脑进行交互的好东西,具体的可以自己搜一下,反正我的思路就是利用微信控制电脑。接下来让我们直接上代码,亲测可用,如有问题请联系,免费帮忙搞定。
[code]#-*- coding: UTF-8 -*- #2018/09/05 #longzhu import os from PIL import Image from selenium import webdriver import time import itchat @itchat.msg_register('Text') def text_reply(msg): global flag message = msg['Text'] fromName = msg['FromUserName'] toName = msg['ToUserName'] if toName == "filehelper": itchat.send(sendMsg, fromName) if message == "打卡": global driver chromedriver = "D:\Python27\chromedriver" os.environ["webdriver.chrome.driver"] = chromedriver driver = webdriver.Chrome(chromedriver) # 打开chrome浏览器 login("longzhu", "123456")#请将此处换成你的账号密码,需要手动输入的话请回复代打卡 daka() try: yanzhengma() itchat.send("可以获取验证码", "filehelper") except: driver.find_element_by_name("check").click() itchat.send("打卡成功", "filehelper") time.sleep(2) driver.save_screenshot('D:\yzm\yzm.png') send('D:\yzm\yzm.png') if message == "验证码": send('D:\yzm\yzm1.jpeg') if message == "再次获取验证码": yanzhengma() itchat.send("获取成功", "filehelper") send('D:\yzm\yzm1.jpeg') if message == "代打卡": itchat.send("请输入账号密码如:longzhu,123456,备注理由", "filehelper") if len(message) > 10: message.split(',') bz = message[2] login(message[0],message[1]) daka() beizhu(bz) if driver.find_element_by_id('image'): yanzhengma() itchat.send("可以获取验证码", "filehelper") else: driver.find_element_by_name("check").click() itchat.send("打卡成功", "filehelper") time.sleep(2) driver.save_screenshot('D:\yzm\yzm.png') send('D:\yzm\yzm.png') if len(message) == 4: shuru(message) time.sleep(3) driver.save_screenshot('D:\yzm\yzm.png') send('D:\yzm\yzm.png') if message == "结果": driver.save_screenshot('D:\yzm\yzm.png') send('D:\yzm\yzm.png') #登录打卡网址 def login(uname, pwd): driver.get("http://om.xxxxx.com/attendances/check_out/6111421") time.sleep(1) driver.maximize_window() # 将浏览器最大化 time.sleep(2) if driver.find_element_by_id("username"): for i in uname: driver.find_element_by_id("username").send_keys(i) time.sleep(0.2) time.sleep(1) if driver.find_element_by_id("password_input"): for j in pwd: driver.find_element_by_id("password_input").send_keys(j) time.sleep(0.2) time.sleep(1) if driver.find_element_by_id("login_button"): driver.find_element_by_id("login_button").click() time.sleep(3) def beizhu(bz): if bz == None: return if driver.find_element_by_id("sub_check_out_remark"): for j in bz: driver.find_element_by_id("sub_check_out_remark").send_keys(j) time.sleep(0.2) time.sleep(1) #点击签出按钮 def daka(): try: driver.find_element_by_id("checkout_btn").click() # 网页中查找签出按钮 except: driver.find_element_by_id("checkin_btn").click() # 点击签入按钮 time.sleep(5) #获取验证码图片 def yanzhengma(): if os.path.exists('D:\yzm\yzm.png'): os.remove('D:\yzm\yzm.png') if os.path.exists('D:\yzm\yzm1.jpeg'): os.remove('D:\yzm\yzm1.jpeg') driver.save_screenshot('D:\yzm\yzm.png') # 截取当前网页,该网页有我们需要的验证码 imgelement = driver.find_element_by_id('image') # 定位验证码 location = imgelement.location # 获取验证码x,y轴坐标 size = imgelement.size # 获取验证码的长宽 rangle = (int(location['x']), int(location['y']), int(location['x'] + size['width']), int(location['y'] + size['height'])) # 写成我们需要截取的位置坐标 i = Image.open("D:\yzm\yzm.png") # 打开截图 frame4 = i.crop(rangle) # 使用Image的crop函数,从截图中再次截取我们需要的区域 frame4.convert('RGB').save('D:\yzm\yzm1.jpeg')#成功获取到验证码图片 #读取验证码 def get_file_content(file): with open(file, 'rb') as fp: return fp.read() #验证码识别 def send(image_path): try: itchat.send_image(image_path, 'filehelper') print("send success") except: print("fail") #刷新验证码 def shuaxinyzm(): if driver.find_element_by_id("image"): driver.find_element_by_id("image").click() #输入验证码 def shuru(yzm): if driver.find_element_by_id("code_input"): if len(yzm)==1: driver.find_element_by_id("code_input").send_keys(yzm) else: for i in yzm: driver.find_element_by_id("code_input").send_keys(i) time.sleep(0.2) if driver.find_element_by_name("check"): driver.find_element_by_name("check").click() print("打卡成功") if __name__ == '__main__': sendMsg = u"{消息助手}:暂时无法回复" usageMsg = u"使用方法:\n1.开启打卡脚本:打卡\n" \ u"2.发送验证码:验证码\n3.重新获取验证码:再次获取验证码\n" \ u"4.帮同事打卡:代打卡\n5.输入验证码:直接回复四位验证码\n" \ u"6.查看打卡是否成功:结果\n" itchat.auto_login() itchat.send(usageMsg, "filehelper") global_var_list = [] itchat.run()
本脚本开启之后,网页版微信会一直在线,需要打卡的时候,在你的文件传输助手界面发送打卡两个字就会开启脚本,在正式使用之前,可以先尝试着操作一遍,以免出错,每次你回复之后,脚本都会给你一个信息反馈,在给出反馈之后,你再进行下一步的处理,因为避免被公司it查到,所以脚本用了很多time.sleep进行进程挂起的操作,所以需要等到电脑端反馈消息之后再进行操作,如果没有验证码的话,直接回复打卡就能搞定,有验证码的话,请按照提示操作。代码量不知不觉有点大,反正乱七八糟的,能用就行,毕竟是写着玩的,基本用不到,像我那么按时上下班的五星好员工,怎么会需要这种东西呢?(小声bb,工资也不给加,早晚我是要跳槽的,哼)
注:本脚本适用于腾讯外包签到签出打卡页面,实测可用,如有问题,可与博主联系。
阅读更多相关文章推荐
- Python selenium实现微博自动登录的示例代码
- 基于python的模拟鼠标进行百度知道自动签到程序
- python使用logging模块发送邮件代码示例
- 用python做自动化测试--web 自动化测试(2)-Selenium 3.x启动IE, Firefox,Chrome代码示例
- python自动发邮件库yagmail的示例代码
- Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
- 基于python实现jenkins自动发布代码平台
- Python Selenium Cookie 绕过验证码实现登录示例代码
- Python实现自动添加脚本头信息的示例代码
- 送书 | 你一定能看懂的算法基础书(代码示例基于Python)
- python爬虫实战--selenium验证码保存+多线程多标签+自动点击+完整代码
- 调用itchat模块实现微信自动回复
- 动态加载python可执行模块的办法(示例代码)
- python itchat 使用记录(代码帖)
- Python实现自动添加脚本头信息的示例代码
- python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
- Python使用Turtle模块绘制五星红旗代码示例
- 用Python+Selenium模拟键盘和鼠标操作,实现自动签到
- 开源you-get项目爬虫,以及基于python+selenium的自动测试利器
- 微软IOC容器Unity简单代码示例3-基于约定的自动注册机制