从零开始Web自动化(四):如何过打字网站的作弊检测,从而实现排行榜第一

一、分析和解决思路
上篇博文中,我们的程序被检测出作弊了,那如何过检测呢?

思路:
我们打的太快了,完全超出了人类的极限。
而且也不可能一直都是一个速度,也不可能每个字母都打正确。
那我们要让程序打的有快有慢,还要故意输错再退格,这样就差不多模拟出“人”在打字了。

二、实现效果
在这里插入图片描述

三、本期源码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import random
from pynput.keyboard import Key, Controller

keyboard = Controller()
browser = webdriver.Chrome()  # 启动浏览器
browser.get('https://dazi.kukuw.com/')  # 打开网站
browser.find_element_by_xpath('//*[@id="time"]').clear()  # 清空测试时间栏
browser.find_element_by_xpath('//*[@id="time"]').send_keys('2')  # 测试时间栏输入2
browser.find_element(By.XPATH, '//*[@id="form"]/ul[6]/li[2]/input').click()  # 点击开始测试按钮
time.sleep(1)
for i in range(0, 60):
    x_v = browser.find_element(By.XPATH, '''//*[@id="i_''' + str(i) + '''"]/div/span''').text + ' '
    for j in x_v:
        wait_time = random.randint(12, 100)
        time.sleep(wait_time / 1000)  # 控制每次打字的间隔时间
        error_value = random.randint(1, 20)
        if error_value == 2:  # 当error_value等于2时,代表故意打错
            error_length = random.randint(1, 4)  # 需要打错几个字母
            for k in range(error_length):  # 进行打错操作
                letter_v = random.randint(97, 122)
                letter = chr(letter_v)  # 数字转换为字母
                time.sleep(wait_time / 1000)
                browser.find_element(By.XPATH, '''//*[@id="i_''' + str(i) + '''"]/input[2]''').send_keys(letter)
            for a in range(error_length):  # 进行退格操作
                keyboard.press(Key.backspace)
                keyboard.release(Key.backspace)
        browser.find_element(By.XPATH, '''//*[@id="i_''' + str(i) + '''"]/input[2]''').send_keys(j)

四、讲解

1.在每次循环打字前,设定打字的间隔时间

 		wait_time = random.randint(12, 100)
        time.sleep(wait_time / 1000)  # 控制每次打字的间隔时间

2.另外设置故意打错的概率及要打错几个字

        error_value = random.randint(1, 20)
        if error_value == 2:  # 当error_value等于2时,代表故意打错
            error_length = random.randint(1, 4)  # 需要打错几个字母
            for k in range(error_length):  # 进行打错操作
                letter_v = random.randint(97, 122)
                letter = chr(letter_v)  # 数字转换为字母
                time.sleep(wait_time / 1000)
                browser.find_element(By.XPATH, '''//*[@id="i_''' + str(i) + '''"]/input[2]''').send_keys(letter)

3.打错后,需要退格再重新输入正常的内容

            for a in range(error_length):  # 进行退格操作
                keyboard.press(Key.backspace)
                keyboard.release(Key.backspace)
        browser.find_element(By.XPATH, '''//*[@id="i_''' + str(i) + '''"]/input[2]''').send_keys(j)

五、整个代码内容不多,实现也很简单。但是会出现一个问题:
如果一个项目需要长期维护,这段代码可读性算比较差的。
我们应该封装它,让他更具有可读性。
下期会分享如何封装你的代码,让它更具有可读性、易用性。并增加可选择登录用户、可自定义选择文章的功能

键指飞舞版打字比赛系统源码 本系统功能完善,使用简便,安全稳定,运行速度快,是高校打字比赛的最佳解决方案。本系统具有反作弊功能,可以杜绝大多数的作弊行为,同时,本系统的后台管理十分方便,极大的减轻了管理员的工作量,如果你是第一次启动此系统,请在后台的“公告设置”中设置此处显示的公告信息。 本系统的几大亮点:页面采用DIV+CSS排版,浏览速度快!全面支持各种版本的浏览器。强大而实用的后台管理中心,使用更方便。页面设计精美,而且支持管理员与参赛者之间的互动,适合各大院校使用。专为高校打字比赛而设计,经过数百次打字比赛实际测试,安全稳定。 常见问题: ------------------------------------- 用户无法注册:可能是你输入的个人信息含用非法字符,如左右中括号,脚本代码等。 用户无法登陆:可能是你的浏览器已经禁用了javascript功能,请在“工具-Internal选项-高级“中设置。 打字成绩保存失败:可能是你的操作被本网站的反作弊系统认为是作弊行为,或者你的打字速度为0字/分。 打字成绩、站内信息总是不变:点击弹出框左上角的“刷新”按钮即可。如果还是不变,可能是你的操作有误。 打字比赛成绩无法删除:这是系统内定的功能,是为了预防某些人对自己的打字比赛成绩不满意,想删除重新测试。如果要删除,可以由管理员登陆后台进行删除。 打字过程中出现程序错误,浏览器被强迫关闭:出现此情况后,先通知管理员,然后打开浏览器重新测试,如果反复出现此情况,可能是你的浏览器存在错误,请换其它浏览器进行打字
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曲鸟

不要打赏,没必要!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值