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

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

一、分析和解决思路


上篇博文中,我们的程序被检测出作弊了,那如何过检测呢?


思路:

我们打的太快了,完全超出了人类的极限。

而且也不可能一直都是一个速度,也不可能每个字母都打正确。

那我们要让程序打的有快有慢,还要故意输错再退格,这样就差不多模拟出“人”在打字了。


二、实现效果


20210719102857847.gif


三、本期源码

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)


五、整个代码内容不多,实现也很简单。但是会出现一个问题:

如果一个项目需要长期维护,这段代码可读性算比较差的。

我们应该封装它,让他更具有可读性。

下期会分享如何封装你的代码,让它更具有可读性、易用性。并增加可选择登录用户、可自定义选择文章的功能

目录
相关文章
|
9天前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
59 19
Selenium IDE:Web自动化测试的得力助手
|
11天前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
88 17
Selenium:强大的 Web 自动化测试工具
|
2月前
|
Web App开发 前端开发 JavaScript
Web开发者必收藏的10个实用网站,你还没收藏吗?
将这些网站收藏起来,定期访问,使它们成为您日常工作的一部分,助您在快速发展的 Web 开发领域保持领先。
115 2
Web开发者必收藏的10个实用网站,你还没收藏吗?
|
1月前
|
人工智能 搜索推荐 PHP
PHP在Web开发中的璀璨星辰:构建动态网站的幕后英雄###
【10月更文挑战第25天】 本文将带您穿越至PHP的宇宙,揭示其作为Web开发常青树的奥秘。通过生动实例与深入解析,展现PHP如何以简便、高效、灵活的姿态,赋能开发者打造动态交互式网站,同时不忘探讨其在新时代技术浪潮中面临的挑战与机遇,激发对技术创新与应用的无限思考。 ###
36 1
|
1月前
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。
|
1月前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
44 0
WK
|
1月前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
83 0
|
3月前
|
前端开发 机器人 测试技术
【RF案例】Web自动化测试弹窗处理
在进行Web自动化测试时,常会遇到不同类型的弹窗,如ajax、iframe、新窗口及alert/Confirm等。这些弹窗可通过Selenium进行定位与处理。其中,ajax弹窗直接定位处理;iframe需先选中再操作;新窗口类似iframe处理;而alert/Confirm则需特殊方法应对。在Robot Framework中,需先定义并获取窗口后使用特定关键字处理。此外,还有部分div弹窗需在消失前快速定位。希望本文能帮助大家更好地处理各类弹窗。
54 6
【RF案例】Web自动化测试弹窗处理
|
3月前
|
Web App开发 存储 安全
Python编写脚本,打开浏览器输入网址,自动化登陆网站
Python编写脚本,打开浏览器输入网址,自动化登陆网站
174 4
|
2月前
|
Web App开发 Java 测试技术
一、自动化:web自动化。Selenium 入门指南:从安装到实践
一、自动化:web自动化。Selenium 入门指南:从安装到实践
55 0