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(
    "https://cas.sf-express.com/cas/login?service=http%3A%2F%2Fhos.sf-express.com%2Findex.html&apptiket=dbe979f1b41f6ea2aeb61003de73bf5518cf829000ed010c")

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()

原文地址:https://www.cnblogs.com/luozhiyun/p/8124967.html

时间: 2024-11-05 12:14:56

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

C语言 -- 定时关机程序

<strong><span style="font-size:14px;">C语言  --  定时关机程序</span></strong> <strong></strong><span style="font-size:14px;"></span> <strong><span style="font-size:14px;">特别

MFC定时关机程序的实现2-添加启动项到注册表

虽然上一篇实现了的定时关机,但是还不够完善,比如开机自动启动,然后按照配置的时间定时关机,并最小化到任务栏. 先来说开机启动怎么实现,开机启动实现的方法有好几种,比如直接在开始菜单启动项里添加一个程序的快捷方式,路径为 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\ 不过这个路径不同的电脑可能不一样,因为这个路径可以改变,比如说改到D盘 也可以直接写入注册表,这个比较方便,这个开机启动项在注册表中的路径是 HKEY_CU

MFC定时关机程序的实现1

写个定时关机程序自用,界面简单实用,最终界面如下 第一步,新建一个MFC对话框应用程序,拖几个控件过来, 界面如下: 然后给下拉列表框,复选按钮绑定变量,以方便进行操作. CComboBox m_com_hour; CComboBox m_com_minute; CComboBox m_com_second; 第二步,先实现简单关机功能,不通过文件读写进行关键.在选择过时间后,确定关机后按时关机. 1,给下拉列表框添加更改事件,直接右键控件->选择添加事件处理程序,选择CBN_SELCHANGE

用Win32写的定时关机程序

由于本人记性不太好,晚上经常忘记关电脑,白白浪费了很多的电.在网上也找了一些定时关机的软件,想到最近自己也在学习VC++,就想自己写一个定时关机的小程序,正好也可以检验自己所学的东西. 程序源码下载地址:点击下载 先来看看效果图: 写的比较简陋,但是只要能实现功能就好了. 写Win32应用程序首先要有WinMain函数: int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR    lpCmdLine

Selenium测试Ajax程序(转)

上周末参加了Qclub的百度技术沙龙,听了百度的孙景卫讲了Web自动化测试,讲的非常好,然后在小组讨论时又有幸座在了一起.我们讨论的一个内容,就是Ajax应用程序比原来的非Ajax程序更不易测试,这里有两个主要原因. 第一:Ajax使得基于纯录制的方式无法工作,因为录制一个操作,这次返回需要5秒钟,下次会更多或更少. 第二:一些测试工具是基于原来非Ajax程序来开发的,后面没做对应的升级. 但是,同样有很多工具支持Ajax的测试,今天我们就来看一下大名鼎鼎的Selenium如何测试Ajax程序.

一个简单的定时小程序

之前一直觉得定时程序好神秘,后来,当我自己真正写了一个小的定时程序时,发现其实没有想象中的那么难.下面,我分享一下我自己的操作过程,希望能对大家有帮助. 1)在我们的项目中添加引用文件:TaskSchedulerEngine.dll(dll定义了一个ITask接口,定义了两个方法Initialize和HandleConditionsMetEvent): 2)创建一个定时触发的类:SyncTask.cs(类名自己随便定义),该类必须实现接口 ITask.具体代码如下: public class S

基于AccessibilityService制作的钉钉自动签到程序

标签: 移动开发安卓自动化操作 2015-12-03 09:56 1736人阅读 评论(10) 收藏 举报 分类: Android(3) 版权声明:本文为博主原创文章,未经博主允许不得转载. 前两天公司开始宣布要使用阿里钉钉来签到啦!!!~~这就意味着,我必须老老实实每天按时签到上班下班了,这真是一个悲伤的消息,可是!!!!那么机智(lan)的我,怎么可能就这么屈服!!!阿里钉钉签到,说到底不就是手机软件签到吗?我就是干移动开发的,做一个小应用每天自动签到不就行了:) 说干就干,首先分析一下,阿

python3之51cto自动定时签到

前言 之前写过一遍,pyhton结合图灵机器人自动回复,之前51cto是使用网页签到,但是已经失效了,微信签到的原理和之前的机器人差不多的,不过是使用了python的itchat模块,结合定时功能,自动签到. 安装模块 这里使用的是python3 pip install itchat pip install apscheduler 代码 #!/usr/bin/env python # -*- coding:utf-8 -*- """ @author:Aiker Zhao @f

定时运行程序

Runnable runnable = new Runnable() { public void run() { task to run goes here try { body();//需要运行的函数名 } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { //e.printStackTrace(); } } };//设定一个线程 ScheduledExecutorService se