zoukankan      html  css  js  c++  java
  • 使用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('
    ', '')
        # 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('
    ', '')
        # 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)
    

      

  • 相关阅读:
    encog(二)神经网络的训练
    encog(一)
    JAVA基础知识总结14(String、StringBuffer、StringBuilder)
    JAVA基础知识总结13(同步)
    JAVA基础知识总结12(多线程)
    JAVA基础知识总结11(异常)
    JAVA基础知识总结10(包类)
    JAVA基础知识总结9(特殊类)
    JAVA基础知识总结8(设计模式)
    JAVA基础知识总结7(抽象类 | 接口)
  • 原文地址:https://www.cnblogs.com/hiuhungwan/p/11139678.html
Copyright © 2011-2022 走看看