selenium定时签到程序

定时任务

# -*- coding: utf-8 -*-
import time import os
import sched import datetime from com.luoluo.v2ex.mengyou import toQuitAfterTen, toquit, tosign
from com.luoluo.v2ex.randomTime import randomTime, night, morning schedule = sched.scheduler(time.time, time.sleep) def execute_command(cmd,flag, inc):
strftime = time.time()
if cmd < strftime and flag == 0:
toquit()
print('签退')
elif cmd < strftime and flag == 1:
tosign()
print('签到')
else:
print("脚本持续运行中.....")
schedule.enter(inc, 0, execute_command, (cmd,flag, inc)) def main(cmd,flag, inc=60):
# enter四个参数分别为:间隔事件、优先级(用于同时间到达的两个事件同时执行时定序)、被调用触发的函数,
# 给该触发函数的参数(tuple形式)
schedule.enter(0, 0, execute_command, (cmd,flag, inc))
schedule.run() if __name__ == '__main__':
# 签退
# random_time = '08:41:00'
# random_time = '2017-12-27 ' + random_time
random_time = night()
random_time = time.strftime("%Y-%m-%d ", time.localtime())+random_time
mktime = time.mktime(time.strptime(random_time, '%Y-%m-%d %H:%M:%S'))
print(datetime.datetime.fromtimestamp(mktime))
main(mktime, 0, 900) # 签到
random_time = morning()
random_time = time.strftime("%Y-%m-%d ", time.localtime()) + random_time
# random_time = '10:41:00'
# random_time = '2017-12-27 ' + random_time
mktime = time.mktime(time.strptime(random_time, '%Y-%m-%d %H:%M:%S'))
mktime = mktime + 86400.0
print(datetime.datetime.fromtimestamp(mktime))
main(mktime, 1, 900)

随机产生时间

# -*- coding: utf-8 -*-

import random

def time2seconds(t):
h,m,s = t.strip().split(":")
return int(h) * 3600 + int(m) * 60 + int(s) def seconds2time(sec):
m,s = divmod(sec,60)
h,m = divmod(m,60)
return "%02d:%02d:%02d" % (h,m,s) def randomTime(st,et): sts = time2seconds(st) #sts==27000
ets = time2seconds(et) #ets==34233 return seconds2time(random.randint(sts, ets)) def morning():
st = "08:30:00"
et = "09:00:00"
return randomTime(st, et) def night():
st = "22:00:00"
et = "22:30:00"
return randomTime(st, et) if __name__ == '__main__':
time = randomTime()
print(time)

主程序

# -*- coding: utf-8 -*-
import pytesseract
from PIL import Image,ImageEnhance
import PIL.ImageOps
from selenium import webdriver
from time import sleep
import urllib from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome(executable_path='D:\chromedriver_win32\chromedriver.exe')
driver.get(
"需要被签到的网址") def initTable(threshold=70):
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
return table def getImage():
image =driver.find_element_by_class_name('yzmImg') driver.save_screenshot('screenshot.png')
left = image.location['x']+3
top = image.location['y']+4
right = image.location['x'] + image.size['width']-3
bottom = image.location['y'] + image.size['height']-4
im = Image.open('screenshot.png')
im = im.crop((left, top, right, bottom))
im.save('screenshot.png') def getCode():
im = Image.open('screenshot.png')
#图片的处理过程
im = im.convert('L')
binaryImage = im.point(initTable(), '1') # im1 = binaryImage.convert('L')
#
# im2 = PIL.ImageOps.invert(im1)
#
# im3 = im2.convert('1')
#
# # out = im3.resize((120,38))
# # im3.show() pytesseract.pytesseract.tesseract_cmd = 'D:\\Users\\soft\\Tesseract-OCR\\tesseract.exe'
asd = pytesseract.image_to_string(binaryImage).replace(" ","")
# print(asd)
if(asd != None and asd !='' and len(asd) ==4):
return asd def toQuitAfterTen():
username = 'username'
password = 'password' getImage()
code = getCode()
while code==None:
image = driver.find_element_by_class_name('yzmImg')
image.click()
getImage()
code = getCode() by_id = driver.find_element_by_id('username')
by_id.clear()
by_id.send_keys(username) element_by_id = driver.find_element_by_id('password')
element_by_id.clear()
element_by_id.send_keys(password) verifyCode = driver.find_element_by_id('verifyCode')
verifyCode.clear()
verifyCode.send_keys(code) driver.find_element_by_css_selector('img[src="/cas/pages/login/hos/login_btn.gif"]').click() def toquit(flags=0):
while flags < 3:
try:
toQuitAfterTen()
sleep(10)
driver.find_element_by_id('outputButton').click()
flags = 99
print("签退成功!")
except:
sleep(4)
flags += 1
print("重试第:"+flags+"次")
sleep(2)
driver.quit()
print(flags) def tosign(flags=0):
while flags < 3:
try:
toQuitAfterTen()
sleep(10)
driver.find_element_by_id('inputButton').click()
flags = 99
print("签到成功!")
except:
sleep(4)
flags += 1
print("重试第: %s次" % flags)
sleep(2)
driver.quit()

selenium定时签到程序的更多相关文章

  1. MFC定时关机程序的实现1

    写个定时关机程序自用,界面简单实用,最终界面如下 第一步,新建一个MFC对话框应用程序,拖几个控件过来, 界面如下: 然后给下拉列表框,复选按钮绑定变量,以方便进行操作. CComboBox m_co ...

  2. vs 2010创建Windows服务定时timer程序

    vs 2010创建Windows服务定时timer程序: 版权声明:本文为搜集借鉴各类文章的原创文章,转载请注明出处:  http://www.cnblogs.com/2186009311CFF/p/ ...

  3. python实现掘金定时签到抽奖

    python实现掘金定时签到抽奖 一. 概述 这里记录一下使用 python 实现掘金定时签到抽奖.首先需要登录掘金,进入签到页面,按 F12 打开浏览器的调试面板,选择 Network,选择 XHR ...

  4. Selenium测试Ajax程序(转)

    上周末参加了Qclub的百度技术沙龙,听了百度的孙景卫讲了Web自动化测试,讲的非常好,然后在小组讨论时又有幸座在了一起.我们讨论的一个内容,就是Ajax应用程序比原来的非Ajax程序更不易测试,这里 ...

  5. asp.net自动打卡、签到程序

    目前公司上下班签到是上局域网的一个系统去点一下,由于打卡比较简单,所以有些快迟到的同事会找已经到公司的人帮忙代打卡.”以其它身份运行程序“来打开IE,去帮人打下,有时多几个人,也要这样操作,我感觉挺麻 ...

  6. 我的定时关机程序(MFC实现) .

    原理: 利用定时器去检查,如输入的是多少分钟后关机,就根据输入的分钟数产生一个COUNT计数器,计数器一直递减,直到1,然后执行关机.如输入的是几时几分关机,那么定时器会每次都检查系统的时间和你输入的 ...

  7. 爬虫基础(三)-----selenium模块应用程序

    摆脱穷人思维 <三> :  培养"目标导向"的思维:  好项目永远比钱少,只要目标正确,钱总有办法解决. 一 selenium模块 什么是selenium?seleni ...

  8. WPF版公司的自动签到程序

    1.外包公司要求早上签到,就写了一个自动打卡程序. 2.一直都想写这个程序,可是一直没有思路,知道有个软件公司找我做自动答题程序,于是自动打卡程序才应运而生.未来可以将自动答题程序开源工大家查看. 3 ...

  9. Linux定时运行程序脚本

    项目开发中经常需要用将某个脚本定时运行从而避免其运行并不会影响到其他程序.虽说可以在脚本中利用sleep命令来做这一点,Linux自带了crontab命令可以很好的执行这一操作. 比如我们有名为som ...

随机推荐

  1. Java学习笔记——String类型转换

    一滴水里观沧海,一粒沙中看世界 ——一带一路欢迎宴致辞 上代码: package cn.stringtoobj; public class TypeConversion { public static ...

  2. Java 中无返回值的方法在使用时应该注意的问题

    Java 中的方法是形态多样的.无返回值的方法在使用时应该规避哪些问题呢? 一.不可以打印调用或是赋值调用,只能是单独调用(非常重要): 二.返回值没有,不代表参数就没有: 三.不能return一个具 ...

  3. Product Backlog:终极任务清单

    健康的Product Backlog就像一个健康的人那样:整洁有序.组织合理.公开透明.一个按照优先级顺序排好的敏捷Backlog不仅能够简化发版和迭代计划,还能够对团队计划去做的所有工作进行细致规划 ...

  4. 曹工说Tomcat4:利用 Digester 手撸一个轻量的 Spring IOC容器

    一.前言 一共8个类,撸一个IOC容器.当然,我们是很轻量级的,但能够满足基本需求.想想典型的 Spring 项目,是不是就是各种Service/DAO/Controller,大家互相注入,就组装成了 ...

  5. 5分钟快速部署PESCMS TEAM 团队任务管理系统开发版

    所在的公司也经历过小团队的发展,为了高效率,通常都是面对面交流,很多时候事情谈论过后不久就已经淡忘了.而且工作任务不能全局观察,成员之间基本上都要主动去询问,效率反而低下.所以今天就介绍一款中小团队的 ...

  6. Codeforces Gym101201B:Buggy Robot(BFS + DP)

    题目链接 题意 给出一个n*m的地图,还有一个操作序列,你原本是要按照序列执行操作的,但是你可以修改操作:删除某些操作或者增加某些操作,问从'R'到'E'最少需要多少次修改操作. 思路 和上次比赛做的 ...

  7. 实现markdown功能

    前言 由于个人一直想弄一个博客网站,所以写博客的功能也就必须存在啦,而之前想过用富文本编辑器来实现的.但是接触了markdown后,发现真的是太好玩了,而且使用markdown的话可以在博客园.CSD ...

  8. springboot2.0.4对接redis3.2.12版本哨兵模式

    redis 哨兵模式的创建 1. 下载redis3.2.12版本.https://codeload.github.com/antirez/redis/zip/3.2.12 2.  解压后放到/usr/ ...

  9. 《转载黑马教程》HTML&&CSS讲义0,,包含教程_仅供参考

    今日内容 1. web概念概述 2. HTML web概念概述 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务 ...

  10. JAVA包装类解析和面试陷阱分析

    包装类 什么是包装类 虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备“对象”的特性——不携带属性.没有方法可调用. 沿用它们只是为了迎 ...