网页自动投票:
- # !/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)