selenium定时签到程序
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定时签到程序的更多相关文章
- MFC定时关机程序的实现1
写个定时关机程序自用,界面简单实用,最终界面如下 第一步,新建一个MFC对话框应用程序,拖几个控件过来, 界面如下: 然后给下拉列表框,复选按钮绑定变量,以方便进行操作. CComboBox m_co ...
- vs 2010创建Windows服务定时timer程序
vs 2010创建Windows服务定时timer程序: 版权声明:本文为搜集借鉴各类文章的原创文章,转载请注明出处: http://www.cnblogs.com/2186009311CFF/p/ ...
- python实现掘金定时签到抽奖
python实现掘金定时签到抽奖 一. 概述 这里记录一下使用 python 实现掘金定时签到抽奖.首先需要登录掘金,进入签到页面,按 F12 打开浏览器的调试面板,选择 Network,选择 XHR ...
- Selenium测试Ajax程序(转)
上周末参加了Qclub的百度技术沙龙,听了百度的孙景卫讲了Web自动化测试,讲的非常好,然后在小组讨论时又有幸座在了一起.我们讨论的一个内容,就是Ajax应用程序比原来的非Ajax程序更不易测试,这里 ...
- asp.net自动打卡、签到程序
目前公司上下班签到是上局域网的一个系统去点一下,由于打卡比较简单,所以有些快迟到的同事会找已经到公司的人帮忙代打卡.”以其它身份运行程序“来打开IE,去帮人打下,有时多几个人,也要这样操作,我感觉挺麻 ...
- 我的定时关机程序(MFC实现) .
原理: 利用定时器去检查,如输入的是多少分钟后关机,就根据输入的分钟数产生一个COUNT计数器,计数器一直递减,直到1,然后执行关机.如输入的是几时几分关机,那么定时器会每次都检查系统的时间和你输入的 ...
- 爬虫基础(三)-----selenium模块应用程序
摆脱穷人思维 <三> : 培养"目标导向"的思维: 好项目永远比钱少,只要目标正确,钱总有办法解决. 一 selenium模块 什么是selenium?seleni ...
- WPF版公司的自动签到程序
1.外包公司要求早上签到,就写了一个自动打卡程序. 2.一直都想写这个程序,可是一直没有思路,知道有个软件公司找我做自动答题程序,于是自动打卡程序才应运而生.未来可以将自动答题程序开源工大家查看. 3 ...
- Linux定时运行程序脚本
项目开发中经常需要用将某个脚本定时运行从而避免其运行并不会影响到其他程序.虽说可以在脚本中利用sleep命令来做这一点,Linux自带了crontab命令可以很好的执行这一操作. 比如我们有名为som ...
随机推荐
- 3D echarts 点位报表展示
一,准备工作1)获取Echarts 以下为官网推荐的几种获取 ECharts方式: 从官网下载界面选择你需要的版本下载,根据开发者功能和体积上的需求,我们提供了不同打包的下载,如果你在体积上没有要求, ...
- Postman接口测试_基本功能
一. 安装与更新 1.安装的方式 方式1:chrome插件版本:chrome--->设置--->扩展程序: 方式2:native版本(具有更好的扩展性,推荐使用):https://ww ...
- 安装R和Rstudio后,Rstudio出现空白和fatal error问题
解决方法: 1.一定要以管理员方式启动Rstudio 2.只能安装一个R版本,之前安装的其他版本需要卸载干净 3.R和Rstudio需要安装在同一目录下
- 005-python-字典操作
1. 字典 dict 用{}来表示 键值对数据 {key:value} 唯一性 键 都必须是可哈希的 不可变的数据类型就可以当做字典中的键 值 没有任何限制 dic = {'name':'alex', ...
- HDU 4461:The Power of Xiangqi(水题)
http://acm.hdu.edu.cn/showproblem.php?pid=4461 题意:每个棋子有一个权值,给出红方的棋子情况,黑方的棋子情况,问谁能赢. 思路:注意“ if a play ...
- 线性表的顺序存储C++代码实现
关于线性表的概念,等相关描述请参看<大话数据结构>第三章的内容, 1 概念 线性表list:零个或多个数据的有限序列. 可以这么理解:糖葫芦都吃过吧,它就相当于一个线性表,每个 ...
- Spring Boot 2.x (十八):邮件服务一文打尽
前景介绍 在日常的工作中,我们经常会用到邮件服务,比如发送验证码,找回密码确认,注册时邮件验证等,所以今天在这里进行邮件服务的一些操作. 大致思路 我们要做的其实就是把Java程序作为一个客户端,然后 ...
- Java用Xom生成XML文档
这个总结源于Java编程思想第四版18.13节的案例: 完整代码地址: Java编程思想:XML 相关Api地址: Attribute Element Document Serializer 由于案例 ...
- 使用反射机制将对象序列化Json
一 思路 获取对象的Class对象. 获取对象的属性数组, 迭代属性数据拼接属性名与属性值, 存入List. 将List转换为流库, 再将流库使用逗号分隔符转换为字符串, 去掉首尾的逗号 二 代码 p ...
- 个人永久性免费-Excel催化剂功能第90波-xml与json数据结构转换表格结构
在网络时代,大量的数据交互以xml和json格式提供,特别是系统间的数据交互和网络WebAPI.WebService接口的数据提供,都是通过结构化的xml或json提供给其他应用调用返回数据.若能提供 ...