反应作弊器:selenium实现

这篇具有很好参考价值的文章主要介绍了反应作弊器:selenium实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、问题描述

我们测反应速度时,测得的结果一般在300ms左右。

这是反应测试网站:https://humanbenchmark.com/tests/reactiontime

反应测试网站页面主要包括三种颜色红、绿和蓝,如图1-1,1-2和1-3。

点击绿色反应测试,selenium,python,前端,Powered by 金山文档

图1-1

点击绿色反应测试,selenium,python,前端,Powered by 金山文档

图1-2

点击绿色反应测试,selenium,python,前端,Powered by 金山文档

图1-3

进入反应测试网站,当出现上述红色页面时,根据页面提示“Wait for green”等待即可。在随机等待几秒(大约三秒)之后,页面会自动变为绿色,并且有“Click”字样,当页面变为绿色时就应该点击页面,点击页面之后就会变为蓝色,并且页面上会记录你的反应时间。

这个反应时间是从页面由红色变为绿色开始,到点击页面为止这段时间,如图1-3,这次测试的反应时间为261ms。如果想继续测反应时间,再点击蓝色页面即可。

现在要做一个程序,用程序来加快反应测试结果,称为反应作弊器。更重要的是学习技术,学习知识。

二、准备工作

  1. 安装selenium

在PyCharm软件Terminal中输入:pip install selenium,即可完成安装。

  1. 安装浏览器和浏览器驱动

使用的是谷歌浏览器以及谷歌浏览器驱动。

谷歌浏览器驱动下载地址:https://chromedriver.storage.googleapis.com/index.html

注意谷歌浏览器版本和谷歌浏览器驱动的版本要相对应。

  1. 写stub/mock页面

写一个简单的stub/mock页面,用于在调试作弊器时测试。在完成编写作弊器代码之前,要经过若干次的代码调试,而调试的结果虽然是可以预知的,但是在代码编写过程中可能会出现不可避免的逻辑错误、语法错误等。如果在代码编写完成并运行成功之前去用目标网站去调试,对目标网站可能造成破坏,可能会被目标网站视为恶意攻击。所以先用stub/mock页面对代码测试,如果通过stub/mock测试,并且stub/mock页面正如我们所期待的那样工作,说明我们编写的代码无错误,这时去用代码运行目标网站时也会如我们期待的一样工作,就不会对目标网站造成破坏。

页面代码见附录A。

页面功能:在一定时间间隔可以改变页面颜色(代码中设置的时间间隔是3秒)。

页面展示效果如图2-1和图2-2。

点击绿色反应测试,selenium,python,前端,Powered by 金山文档

图2-1

点击绿色反应测试,selenium,python,前端,Powered by 金山文档

图2-2

红色和绿色下方的“反应时间”处,在点击绿色页面时会记录反应时间的毫秒数,如图2-3,手动点击,此次反应时间是380ms。

点击绿色反应测试,selenium,python,前端,Powered by 金山文档

图2-3

  1. 代理ip

在测试目标网站时,使用的是免费代理ip,获取网站:https://www.kuaidaili.com/free/inha/1/

为什么要使用代理ip?因为作弊器在运行的过程中,要抓取网站中的信息,但是有些网站会限制爬虫的访问,如果使用代理IP,就可以突破这种限制,获取到网站中的信息。代理ip可以让用户在访问网站时隐藏自己的真实ip,达到保护隐私的目的,这就避免了被网站认定为恶意攻击,从此拒绝你的ip访问。

三、技术方案

制作反应作弊器,而反应作弊器是通过页面颜色变化触发的,所以监测页面颜色变化是关键问题。

这里使用的监测页面颜色变化的方案:

  1. 设置一个获取页面颜色的时间间隔,这个时间间隔要比页面颜色变化时间间隔要短,并用变量记录当前的页面颜色。(这里设置获取页面的时间间隔,设置获取stub/mock和反应测试网站中页面颜色都为10ms)

  1. 如果当前的颜色和上一个时刻保存的颜色不一致,说明颜色改变。

  1. 页面由红色变为绿色时,程序控制点击页面。

对于程序控制页面点击,在控制stub/mock页面时使用的语句为(完整代码见附录B):

wd.find_element(By.ID, 'bg').click()

在控制点击目标网站使用的语句为(完整代码见附录C):

 elements = wd.find_elements(By.CSS_SELECTOR, '.css-saet2v,.view-go')
                for element in elements:
                    element.click()

四、作弊器架构图

先要理清作弊器、selenium、浏览器、浏览器驱动、stub/mock或反应测试网站之间是如何工作的。

  1. 程序(作弊器)会调用Selenium客户端的库函数(例如获取页面颜色元素,点击页面元素)。

  1. 然后Selenium客户端库会发送命令,把命令发送给浏览器的驱动程序(WebDriver)。

  1. 浏览器驱动程序(WebDriver)接收命令后,驱动浏览器去执行命令。

  1. 浏览器执行命令(打开stub/mock或反应测试网站等),然后再将命令结果返回给浏览器驱动(WebDriver)。

  1. 浏览器驱动程序获取命令执行的结果,再将结果返回给程序(作弊器)。

  1. 程序再对返回结果做处理。

所以,作弊器、selenium、浏览器、浏览器驱动和stub/mock页面之间的关系如图4-1。

点击绿色反应测试,selenium,python,前端,Powered by 金山文档

图4-1

同理,作弊器、selenium、浏览器、浏览器驱动和反应测试网站之间的关系如图4-2。

点击绿色反应测试,selenium,python,前端,Powered by 金山文档

图4-2

五、实验结果

如图5-1,这是在stub/mock页面测试时的结果。从图中我们可以看到使用作弊器来测反应时间时,反应时间为40ms,对比图2-3中手动点击反应时间为380ms,通过作弊器可以使反应时间变短。

点击绿色反应测试,selenium,python,前端,Powered by 金山文档

图5-1

如图5-2,这是在目标网站运行的结果。在stub/mock页面中调试完毕,得到预期结果之后,在反应测试网站测试,得到的反应时间为39ms,对比人手动在网站测试的成绩如图1-3的261ms,反应时间变短。

点击绿色反应测试,selenium,python,前端,Powered by 金山文档

图5-2

附录A

stub/mock页面代码。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>测试页面</title>
        <script type="text/javascript">
            var timeStart;
            var timeEnd;
            window.onload = function() {
                var bg = document.getElementById("bg");
                setColor();
                bg.addEventListener('click', function greenToBlue() {
                    if(bg.style.backgroundColor == "rgb(75, 219, 106)") {
                        bg.style.backgroundColor = "rgb(43, 135, 209)"
                        timeEnd = new Date().getTime();
                        document.getElementById('time').innerHTML = (timeEnd - timeStart) + 'ms';
                }
                })
                window.setTimeout("changeColor()",3000);    
            }
            function setColor() {
                bg.style.backgroundColor="rgb(206, 38, 54)"
            }
            function changeColor() {
                if(bg.style.backgroundColor == "rgb(206, 38, 54)") {
                    bg.style.backgroundColor="rgb(75, 219, 106)";
                     timeStart = new Date().getTime();
                } else {
                    bg.style.backgroundColor="rgb(206, 38, 54)";
                }
                window.setTimeout("changeColor()",3000);
            }
            
        </script>
    </head>
    <body>
        <div id="bg" style="width: 400px; height: 400px;">
        </div>
        <div id="time">反应时间</div>
    </body>
</html>

附录B

在stub/mock页面测试时的代码。

import time, os
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
wd = webdriver.Chrome()
wd.get('http://127.0.0.1:8848/test/index.html')
colorBefore = wd.find_element(By.ID, 'bg').value_of_css_property('background-color')
def function(inc):
    global colorBefore
    while True:
        colorAfter = wd.find_element(By.ID, 'bg').value_of_css_property('background-color')
        if colorBefore == colorAfter:
            continue
        else:
            if colorBefore == 'rgba(206, 38, 54, 1)':
                wd.find_element(By.ID, 'bg').click()
        colorBefore = colorAfter
        time.sleep(inc)
function(0.01)

附录C

作弊器程序完整代码。文章来源地址https://www.toymoban.com/news/detail-785291.html

import time, os
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.proxy import Proxy, ProxyType
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=http://121.13.252.62:41564')
wd = webdriver.Chrome(options=options)
wd.get('https://humanbenchmark.com/tests/reactiontime')
colorBefore = ''
elementsBefore = wd.find_elements(By.CSS_SELECTOR, '.css-saet2v,.view-waiting')
for element in elementsBefore:
    colorBefore = element.value_of_css_property('background-color')
def function(inc):
    global colorBefore
    while True:
        colorAfter = ''
        elementAfter = wd.find_elements(By.CSS_SELECTOR, '.css-saet2v,.view-waiting')
        for element in elementAfter:
            colorAfter = element.value_of_css_property('background-color')
        if colorBefore == colorAfter:
            continue
        else:
            if colorBefore == 'rgba(206, 38, 54, 1)':
                elements = wd.find_elements(By.CSS_SELECTOR, '.css-saet2v,.view-go')
                for element in elements:
                    time.sleep(0.3)
                    element.click()
        colorBefore = colorAfter
        time.sleep(inc)
function(0.01)

到了这里,关于反应作弊器:selenium实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pycharm中编写测试用例,点击单个方法前的绿色三角运行出现问题

    在编写完成测试用例之后,需要调试单个的测试用例,于是就点击方法前的绿色三角运行,就是下图这个 然后呢弹出配置页面,需要配置什么路径啊,目录啊什么的,搞了大半天也不好用; 后来呢,发现我的文件名称带有下划线_,去掉下划线后重新运行,好用了,欣喜若狂

    2024年02月14日
    浏览(42)
  • 解决Windows系统远程登陆后vscdoe无法输入字符,键盘没有反应,鼠标可以点击,没有反应

    使用vscode编译器时,通过远程登录或者屏幕锁屏解锁后,vscode出现无法输入字符内容,但vscode没有死机,切换到其他软件的窗口再切换回来后,可以使用鼠标点击,但是只要使用键盘输入就会又出现卡死的现象。 这个问题我已经遇到两年多了,一直没有解决,在vscode的git仓库

    2024年02月07日
    浏览(73)
  • Unity UGUI事件输入,点击UI无反应

    之前被一个特别低级的UI点击问题卡了好久,记录一下,避免之后再犯同样的错误。 UI事件输入未接受到的原因无非就几个,一一排查总能找到原因。 1、若是直接使用的unity组件中的按钮,但是点击按钮没有反应。         1)查找是否被其他UI遮挡         2)查找是否接收

    2024年04月13日
    浏览(48)
  • RuoYi-Vue前端部署,菜单点击无反应

    问题原因: 路由懒加载导致 现象: 登录功能正常,菜单点击无反应,F12查看无网络请求,控制台报错。 解决方法1: 修改permission.js文件 修改为   解决方法2:  (1)安装插件 npm install @babel/plugin-syntax-dynamic-import --save-dev (2)修改babel.config.js (3)正常打包发布。 

    2024年01月18日
    浏览(37)
  • iPhone开启“轻点唤醒”功能但点击屏幕无反应怎么解决?

    iPhone的“轻点唤醒”功能启用时,用户只需手指轻触或点击手机屏幕即可快速唤醒设备,无需按压任何按钮。然而,有些用户在使用“轻点唤醒”功能唤醒屏幕时,遇到该功能失灵,无法正常唤醒屏幕的情况,这是怎么回事呢? 在本文中,小编将给大家介绍一些简单的解决方

    2024年02月11日
    浏览(28)
  • 为小程序发布之后from表单提交,点击提交无反应

    问题出现的场景:再开发者工具里面调试都是正常的,但是发布到预览版之后就出现问题了,而且目前只有一个苹果12手机有问题,各种排除解决都没找到问题解决 1、from表单提交,点击提交无反应 | 微信开放社区 2、小程序发布上线后有个按钮点击没反应? | 微信开放社区

    2024年02月16日
    浏览(34)
  • 【无标题】idea 中 SpringBoot 点击运行没反应,按钮成灰色

    在使用 Spring Boot 开发项目时,可能会遇到一个问题:点击运行按钮后,控制台没有任何输出,项目界面也没有显示。这种情况可能是由多种原因导致的,本文将介绍一些常见的解决方法。 首先看下Groovy插件是否选择,取消选择 1. 检查端口是否被占用 首先,我们需要检查应用

    2024年02月11日
    浏览(34)
  • office安装双击setup后点击‘立即安装’无反应(闪退)

    如题,在重装office时,可能会遇到以上问题。(注意是:重装) 下载到office的包之后,解压,找到并双击setup.exe,会看到如下界面:  当点击“立即安装”之后,界面却消失了(闪退),然后也没有安装的进度条。试了几次均不行。 搜索了相关的解答,看到最多的是“ off

    2024年02月04日
    浏览(43)
  • Ubuntu22.04更新后 点击深度微信无反应

    系统版本:Ubuntu 22.04 jammy 内核:x86_64 Linux 5.15.0-53-generic deepin-wine6-stable 版本:6.0.0.41-1 深度微信图标点击后,是运行 /opt/apps/com.qq.weixin.deepin/files/run.sh (详见 /opt/apps/com.qq.weixin.deepin/entries/applications/com.qq.weixin.deepin.desktop ) 现象: 当点击深度微信图标是无反应。测试直接运行

    2024年02月13日
    浏览(30)
  • MacBook IDEA 使用蓝牙外接鼠标 点击右键无法呼出菜单(右键点击无反应)

    使用最新版的IDEA(IntelliJ IDEA 2022.1.2 (Ultimate Edition)),并使用蓝牙连接外置鼠标,IDEA右键无法呼出菜单。只能偶尔呼出一次。绝大部分时间无法呼出。此时包括笔记本的鼠标触控板也无法在IDEA中呼出菜单。但是在其他软件都可以正常呼出菜单。只有在IDEA中会出现这个问题。

    2024年02月11日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包