网页自动投票:

# !/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Hiuhung Wan import re
import pyperclip
import pyautogui as py
from time import sleep def select(line):
'''
勾选要投票的行。
第一行打勾的处的坐标是是:1100,93,每一行的行距是73
:param line:行号
:return:None
'''
x = 1100
y = 93 + (line - 1) * 73
py.click(x, y)
sleep(0.3) def open_url(url):
'''
打开网页
:param url:网址
:return:None
'''
py.rightClick(x0 + 16, y0 + 16)
sleep(1)
# 无痕模式
py.click(x0, y0 - 100)
sleep(1)
# 按F6,把光标切换到地址栏
py.press("f6")
sleep(0.2)
# 输入url
py.typewrite(url)
sleep(0.2)
py.press("enter")
sleep(5) def get_vote_num():
'''
获取目前最新票数
:return:目前最新票数的列表
'''
# 点击到界面里
py.click(int(screen_x / 2 - 220), int(screen_y / 2))
sleep(0.1)
# 鼠标向下滚400,滚到最底部
py.scroll(-400)
sleep(0.5)
# 全选网页文字
py.hotkey('ctrl', 'a')
# 复制
py.hotkey('ctrl', 'c')
sleep(0.1)
py.click()
# 读取粘贴板信息
str0 = pyperclip.paste()
# 去掉回车
str0 = str0.replace('\n', '')
# print(str0)
res = re.findall(r'\d+', str0)
# 用于存放大于100的数字
list_vote = []
for i in res:
j = int(i)
if j > 100:
list_vote.append(j)
# 把第一个2018删掉
del list_vote[0]
print("票数分别是:", list_vote)
return list_vote def get_line_num_of_voting(list_vote):
'''
传入全部人员的票数,得到要进行投票的序号(行号)
:param list_vote:目前最新票数的列表
:return:要进行投票的序号(行号)
'''
# 复制一份
list_vote_bak = list_vote[:]
# 去掉自己的票,刚好位于最后
list_vote_bak.pop(-1)
list_vote_bak.sort()
# 票数最少的前5名
list_vote_bak = list_vote_bak[:5]
# print(list1)
# 存放要选取的公司位于第几行
list_line_num = []
for i in list_vote_bak:
if i in list_vote:
j = list_vote.index(i)
list_vote[j] = 0
list_line_num.append(j + 1)
list_line_num.sort()
print("最少票行号:", list_line_num)
# 把自己加上
list_line_num.append(12)
return list_line_num def voting(list_line_num):
'''
投票
:param list_line_num: 要进行投票的序号(行号)
:return: None
'''
# 勾选
for i in list_line_num:
select(i)
# 提交投票
py.click(980, 1005)
sleep(1)
# 关闭窗口
py.click(1900, 13)
sleep(1) if __name__ == '__main__':
url = 'https://dwz.cn/ymfarMUf'
# 屏幕分辨率,如1920*1080
screen_x, screen_y = py.size()
# 在屏幕底端(任务栏)找到浏览器图标
x0 = 255
y0 = 1047
for i in range(2):
open_url(url)
voting(get_line_num_of_voting(get_vote_num()))

  

  

  不到15秒,可以投完一轮

票数分别是: [744, 744, 743, 744, 742, 743, 771, 742, 742, 743, 742, 1022]
最少票行号: [3, 5, 8, 9, 11]
票数分别是: [744, 744, 744, 744, 743, 743, 771, 743, 743, 743, 743, 1023]
最少票行号: [5, 6, 8, 9, 10]

  

今天刷票的时候,发现偶尔会因为5秒还没打开完网页而发生异常,所以加入了异常处理,

还有就是每次投完票后,检查是否投票成功。

最后说一下,x0,y0需要根据自己电脑设置

# !/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Hiuhung Wan import re
import pyperclip
import pyautogui as py
from time import sleep def select(line):
'''
勾选要投票的行。
第一行打勾的处的坐标是是:1100,93,每一行的行距是73
:param line:行号
:return:None
'''
x = 1100
y = 93 + (line - 1) * 73
py.click(x, y)
sleep(0.3) def open_url(url):
'''
打开网页
:param url:网址
:return:None
'''
py.rightClick(x0 + 16, y0 + 16)
sleep(1)
# 无痕模式
py.click(x0, y0 - 100)
sleep(1)
# 按F6,把光标切换到地址栏
py.press("f6")
sleep(0.2)
# 输入url
py.typewrite(url)
sleep(0.2)
py.press("enter")
sleep(5) def get_vote_num():
'''
获取目前最新票数
:return:目前最新票数的列表
'''
# 点击到界面里
py.click(int(screen_x / 2 - 220), int(screen_y / 2))
sleep(0.1)
# 鼠标向下滚400,滚到最底部
py.scroll(-400)
sleep(0.5)
# 全选网页文字
py.hotkey('ctrl', 'a')
# 复制
py.hotkey('ctrl', 'c')
sleep(0.1)
py.click()
# 读取粘贴板信息
str0 = pyperclip.paste()
# 去掉回车
str0 = str0.replace('\n', '')
# print(str0)
res = re.findall(r'\d+', str0)
# 用于存放大于100的数字
list_vote = []
for i in res:
j = int(i)
if j > 100:
list_vote.append(j)
# 把第一个2018删掉
del list_vote[0]
print("票数分别是:", list_vote)
return list_vote def get_line_num_of_voting(list_vote):
'''
传入全部人员的票数,得到要进行投票的序号(行号)
:param list_vote:目前最新票数的列表
:return:要进行投票的序号(行号)
'''
# 复制一份
list_vote_bak = list_vote[:]
# 去掉自己的票,刚好位于最后
list_vote_bak.pop(-1)
list_vote_bak.sort()
# 票数最少的前5名
list_vote_bak = list_vote_bak[:5]
# print(list1)
# 存放要选取的公司位于第几行
list_line_num = []
for i in list_vote_bak:
if i in list_vote:
j = list_vote.index(i)
list_vote[j] = 0
list_line_num.append(j + 1)
list_line_num.sort()
# print("最少票行号:", list_line_num)
# 把自己加上
list_line_num.append(12)
return list_line_num def voting(list_line_num):
'''
投票
:param list_line_num: 要进行投票的序号(行号)
:return: None
'''
# 勾选
for i in list_line_num:
select(i)
# 提交投票
py.click(980, 1005)
sleep(1)
# 判断有无投票成功
# 全选网页文字
py.hotkey('ctrl', 'a')
# 复制
py.hotkey('ctrl', 'c')
# 读取粘贴板信息
str0 = pyperclip.paste()
if '投票成功' not in str0:
# 投票不成功
print("投票不成功!!")
py.click(1900, 13)
sleep(1)
# else: # 投票成功
# pass
# 关闭窗口
py.click(1900, 13)
sleep(1) if __name__ == '__main__':
url = 'https://dwz.cn/ymfarMUf'
# 屏幕分辨率,如1920*1080
screen_x, screen_y = py.size()
# 在屏幕底端(任务栏)找到浏览器图标
x0 = 157
y0 = 1047
for i in range(200):
try:
open_url(url)
voting(get_line_num_of_voting(get_vote_num()))
except:
print("发生了异常")
# 关闭窗口
py.click(1900, 13)
sleep(1)

  

使用pyautogui自动在某网站投票的脚本的更多相关文章

  1. iptables自动屏蔽访问网站最频繁的IP

    iptables自动屏蔽访问网站频繁的IP 屏蔽每分钟访问超过200的IP 方法1:根据访问日志(Nginx为例 #!/bin/bash DATE=$(date +%d/%b/%Y:%H:%M) AB ...

  2. linux - 怎么自动填写有交互的shell脚本 - SegmentFault

    linux - 怎么自动填写有交互的shell脚本 - SegmentFault TCL/Expect交互式自动化测试概要 - - ITeye技术网站 expect是一种基于TCL,能与交互式程序进行 ...

  3. Web前端性能优化教程05:网站样式和脚本

    本文是Web前端性能优化系列文章中的第五篇,主要讲述内容:网站样式和脚本代码的放置位置.使用外部javascript和css.完整教程可查看:Web前端性能优化 一.将样式表放在顶部 可视性回馈的重要 ...

  4. 初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助

    初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: var fs = require('f ...

  5. Python 网站后台扫描脚本

    Python  网站后台扫描脚本 #!/usr/bin/python #coding=utf-8 import sys import urllib import time url = "ht ...

  6. 定时自动从FTP服务器取数据脚本

    环境需求:某些情况下经常需要向FTP服务器取文件,可以用定时任务执行简单脚本自动去取相应文件. 一般用法: ~]# ftp  IP地址  端口 //ftp命令可以通过yum install ftp方式 ...

  7. linux下EOF写法梳理 自动新建分区并挂载的脚本

    linux下EOF写法梳理 - 散尽浮华 - 博客园 https://www.cnblogs.com/kevingrace/p/6257490.html 在平时的运维工作中,我们经常会碰到这样一个场景 ...

  8. 通过kfed自动获取磁盘信息的小脚本

    通过kfed自动获取磁盘信息的小脚本 编译KFED [oracle@rac lib]$cd $ORACLE_HOME/rdbms/lib [oracle@rac lib]$ pwd /u01/app/ ...

  9. 获取网站title的脚本

    脚本在此 公司的商城需要添加一个脚本,这个脚本就是观察首页页面是否正常,虽然已经配置了zabbix监控网站是否200,但是有一些特殊的情况,比如网页可以打开但是页面是"file not fo ...

随机推荐

  1. insert/delete/select/update 以及一些在select中常用的函数之类的

    crud程序员:create,read,update.delete 一.insert 细节说明: 1.插入的数据应与字段的数据类型相同.比如把'abc'添加到int类型会错误2.数据的长度应在列的规定 ...

  2. spring5+Struts2+hibernate5

    一,加jar包 加入顺序,个人推荐,spring->struts2->hibernate spring的jar包:基本包共21个+用到的aspectj注解的包2个+日志包1个 ------ ...

  3. 从MVC到DDD的架构演进

    DDD这几年越来越火,资料也很多,大部分的资料都偏向于理论介绍,有给出的代码与传统MVC的三层架构差异较大,再加上大量的新概念很容易让初学者望而却步.本文从MVC架构角度来讲解如何演进到DDD架构. ...

  4. 备忘录——关于C#生成条形码

    目录 0. 背景说明 1. 使用ZXing.NET 2. 使用BarcodeLib 3. 使用字体 4. 参考 志铭-2022年2月15日 22:15:46 0. 背景说明 在.net程序中生成69码 ...

  5. 4、网络并发编程--僵尸进程、孤儿进程、守护进程、互斥锁、消息队列、IPC机制、生产者消费者模型、线程理论与实操

    昨日内容回顾 操作系统发展史 1.穿孔卡片 CPU利用率极低 2.联机批处理系统 CPU效率有所提升 3.脱机批处理系统 CPU效率极大提升(现代计算机雏形) 多道技术(单核CPU) 串行:多个任务依 ...

  6. 利用shell脚本[带注释的]部署单节点多实例es集群(docker版)

    文章目录 目录结构 install_docker_es.sh elasticsearch.yml.template 没事写写shell[我自己都不信,如果不是因为工作需要,我才不要写shell],努力 ...

  7. matlab文件处理

    1.读取文件(按行读取) fid = open('file_name');while(~feof(fid)) line = fgetl(fid); % 读取一行数据 endfid.close(); 2 ...

  8. 1、Oauth概念与模式

    参考 OAuth 2.0 的一个简单解释

  9. k8s虚拟机未关闭,电脑重启后,虚拟机无法启动

    莫名其妙电脑重启了,虚拟机连不上,心里真的是一万匹草泥马,显示如下: Generating "/run/initramfs/rdsosreport.txt" Entering em ...

  10. C#爬虫(03):使用Selenium

    一.介绍: Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. 1.Selenium Webdriver(也就是Selenium2 ...