使用pyautogui自动在某网站投票的脚本
网页自动投票:
# !/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自动在某网站投票的脚本的更多相关文章
- iptables自动屏蔽访问网站最频繁的IP
iptables自动屏蔽访问网站频繁的IP 屏蔽每分钟访问超过200的IP 方法1:根据访问日志(Nginx为例 #!/bin/bash DATE=$(date +%d/%b/%Y:%H:%M) AB ...
- linux - 怎么自动填写有交互的shell脚本 - SegmentFault
linux - 怎么自动填写有交互的shell脚本 - SegmentFault TCL/Expect交互式自动化测试概要 - - ITeye技术网站 expect是一种基于TCL,能与交互式程序进行 ...
- Web前端性能优化教程05:网站样式和脚本
本文是Web前端性能优化系列文章中的第五篇,主要讲述内容:网站样式和脚本代码的放置位置.使用外部javascript和css.完整教程可查看:Web前端性能优化 一.将样式表放在顶部 可视性回馈的重要 ...
- 初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助
初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: var fs = require('f ...
- Python 网站后台扫描脚本
Python 网站后台扫描脚本 #!/usr/bin/python #coding=utf-8 import sys import urllib import time url = "ht ...
- 定时自动从FTP服务器取数据脚本
环境需求:某些情况下经常需要向FTP服务器取文件,可以用定时任务执行简单脚本自动去取相应文件. 一般用法: ~]# ftp IP地址 端口 //ftp命令可以通过yum install ftp方式 ...
- linux下EOF写法梳理 自动新建分区并挂载的脚本
linux下EOF写法梳理 - 散尽浮华 - 博客园 https://www.cnblogs.com/kevingrace/p/6257490.html 在平时的运维工作中,我们经常会碰到这样一个场景 ...
- 通过kfed自动获取磁盘信息的小脚本
通过kfed自动获取磁盘信息的小脚本 编译KFED [oracle@rac lib]$cd $ORACLE_HOME/rdbms/lib [oracle@rac lib]$ pwd /u01/app/ ...
- 获取网站title的脚本
脚本在此 公司的商城需要添加一个脚本,这个脚本就是观察首页页面是否正常,虽然已经配置了zabbix监控网站是否200,但是有一些特殊的情况,比如网页可以打开但是页面是"file not fo ...
随机推荐
- 1Python运行Appium测试的例子
电脑系统配置:Windows7的64位 1.Python sample(Python示例)下载 https://github.com/appium/sample-code/tree/master/sa ...
- Solution -「NOI 2012」「洛谷 P2050」美食节
\(\mathcal{Description}\) Link. 美食节提供 \(n\) 种菜品,第 \(i\) 种的需求量是 \(p_i\),菜品由 \(m\) 个厨师负责制作,第 \(j\) ...
- [LeetCode]7. 整数反转(Java)
原题地址: reverse-integer 题目描述: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果. 如果反转后整数超过 32 位的有符号整数的范围 [−2^31, ...
- JavaScript函数式编程(纯函数、柯里化以及组合函数)
JavaScript函数式编程(纯函数.柯里化以及组合函数) 前言 函数式编程(Functional Programming),又称为泛函编程,是一种编程范式.早在很久以前就提出了函数式编程这个概念了 ...
- Dubbo源码剖析六之SPI扩展点的实现之getExtensionLoader
Dubbo SPI机制之三Adaptive自适应功能 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中,示例案例中自定义了扩展接口而不是使用Dubbo已提供的扩展接口.在案例中,主程序分 ...
- ACM对抗赛有感
2022.2.22 一个有"爱"的日子,注定不会平凡(对于24oier来说),原因是gg让我们参加与大连理工大学的对抗赛. 为此队友都准备好各种板子,上了比赛才发现根本没有 可怜了 ...
- 攻防世界Web_ics_05
题目: 题目描述:其他破坏者会利用工控云管理系统设备维护中心的后门入侵系统 题目场景: 1.进入云平台设备中心界面,查看以下源码发现?page= ,(点下云平台设备维护中心url里也能出?page ...
- Java并发杂谈(一):volatile的底层原理,从字节码到CPU
volatile的特性 volatile是Java中用于修饰变量的关键字,其主要是保证了该变量的可见性以及顺序性,但是没有保证原子性:其是Java中最为轻量级的同步关键字: 接下来我将会一步步来分析v ...
- c# 编程学习(二)
标识符是对程序中的各个元素进行标识的名称. 只能使用字母(大写和小写).数字和下划线 标识符必须以字母或下划线开头 变量是容纳值的存储位置.可将变量想象成容纳临时信息的容器 ...
- C#?和??运算符以及合并条件表达式
最近项目中,常常碰到这个?和??这两个操作符,之前说得不够详细,趁着周末补全来,希望能够给大家带来帮助. (一)?操作符 我们知道值类型是不肯能为空的,它总是包含值的本身,不会为NULL,这估计也是值 ...