一、环境搭建
本程序使用了浏览器的webdiver自动控制程序包,所以在使用本程序时需要进行相关环境变量:
1.首先查看浏览器的版本号
2.安装相应的驱动包
访问:chromedriver下载地址,下载对应版本的chromedriver(大版本号相同即可),并放在浏览器的安装目录下,并将安装目录添加到系统环境变量的Path中即可。(Edge浏览器需要下载edgedriver)
二、源码讲解
1.在打字前,引用webdriver包和相关函数:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import random
from pynput.keyboard import Key, Controller
global browser
2.定义webdriver的地址并引用
options = webdriver.EdgeOptions()
options.add_experimental_option('detach', True) # 定义edge驱动去地址
keyboard = Controller()
browser = webdriver.Edge(options=options) # 启动浏览器
3.输入竞赛码和测试时间
# 选择竞赛模式
browser.find_element(by=By.ID, value='radio_group2').click() # 点击竞赛按钮
time.sleep(1) # 等待时间
browser.find_element(by=By.ID, value='group_num').send_keys(invitation_code) # 输入邀请码
time.sleep(1)
# 选择普通模式
browser.find_element(by=By.ID, value='time').clear() # 清除原有的测试时间
browser.find_element(by=By.ID, value='time').send_keys(test_time) # 输入测试时间
browser.find_element(By.XPATH, '//*[@id="form"]/ul[6]/li[2]/input').click() # 点击开始测试按钮
time.sleep(0.5)
4.在每次循环打字前,设定打字的间隔时间:
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:
time.sleep(speed) # 控制每次打字的间隔时间
5.设置故意打错的概率及要打错几个字:
error_value = random.randint(1, 20)
if error_value == 2: # 当error_value等于2时,代表故意打错
error_length = random.randint(1, 3) # 需要打错几个字母
for k in range(error_length): # 进行打错操作
letter_v = random.randint(97, 122)
letter = chr(letter_v) # 数字转换为字母
time.sleep(speed)
browser.find_element(By.XPATH, '''//*[@id="i_''' + str(i) + '''"]/input[2]''').send_keys(letter)
原理:生成随机数然后将数字随机转换成字母
6.打错后,需要退格再重新输入正常的内容:
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.如果发现浏览器闪退的话请检查相应的webdriver与浏览器版本号是否一致
2.输入数字时注意进行数据类型转换(输入的数字默认为char类型)
print("\n\n输入的数字与实际速度不符合且有少许误差,且不同浏览器的都不同,可以先测试一下,然后输入合适的数字\n")
speed = float(input("请输入速度:")) # 将数据类型char转换为float浮点型
print("\n请选择您的测试类型:\n1.英文打字\n2.中文打字\n3.竞赛\n4.竞赛(邀请码)")
mode = input()
mode = int(mode) # 转换为int整型
3.selenium相关教程:
(1)selenium网页自动化操作(进行定位和输入、单机等操作)
五、总结
这个代码很容易理解和实现,就是运用了selenium的相关操作,然后运用了一些函数进行用户登录、换则打字模式等操作
六.源码
相关源码可以私信作者的CSDN进行获取