Selenium实现全自动打字

任务

使用selenium代替人工打字测试。

效果

Selenium实现全自动打字_chrome

思路

  • 模拟用户登录

首先需要在https://dazi.kukuw.com 注册一个账号。

因为发现到该网站的请求是get请求,在网站后面指定name 属性即可登录。

然后在登录网站的时候采用https://dazi.kukuw.com/?name=yourname

yourname 这里改成你自己的用户名。

然后模拟输入密码,模拟点击登录按钮。

注意:登录后跳转到另一个页面,然后出现弹窗,所以我们需模拟关闭弹窗。

该部分代码如下:

    browser = webdriver.Chrome()  # 启动浏览器
    browser.get('https://dazi.kukuw.com/?name=yourname')  # 打开网站  yourname 改成自己注册的账户名
    browser.find_element_by_xpath('//*[@id="form"]/ul[2]/li[2]/input[1]').send_keys('password')  # 输入密码 pawwod改成自己的密码
    browser.find_element_by_xpath('//*[@id="form"]/ul[2]/li[2]/input[2]').click()
    time.sleep(1)
    alert = browser.switch_to.alert  # 切换到弹窗
    alert.accept()  # 点击确定
  • 设置打字测试时间

为了方便,我们这里设置打字时间为一分钟,而且该网站还可设置打字内容,为方便,这里我使用默认文章。

该部分代码如下:

    browser.find_element(By.XPATH, '//*[@id="time"]').clear()  # 清空测试时间栏
    browser.find_element(By.XPATH, '//*[@id="time"]').send_keys('1')  # 测试时间栏输入1分钟
    browser.find_element(By.XPATH, '//*[@id="form"]/ul[6]/li[2]/input').click()  # 点击开始测试按钮
    time.sleep(1)
  • 模拟人进行快速打字

为了防止网站识别出是机器在打字,我们需要给设置一定的错误率和延迟时间。

然后模拟人退格重新输入。

通过randtime 实现。

   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, 30)
            time.sleep(wait_time / 1000)  # 控制每次打字的间隔时间
            error_value = random.randint(1, 30)
            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):  # 进行退格操作
                    browser.find_element(By.XPATH, '''//*[@id="i_''' + str(i) + '''"]/input[2]''').send_keys(
                        Keys.BACKSPACE)
            browser.find_element(By.XPATH, '''//*[@id="i_''' + str(i) + '''"]/input[2]''').send_keys(j)

总代码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import random
from selenium.webdriver.common.keys import Keys

if __name__ == '__main__':
    browser = webdriver.Chrome()  # 启动浏览器
    browser.get('https://dazi.kukuw.com/?name=yourname')  # 打开网站  yourname 改成自己注册的账户名
    browser.find_element_by_xpath('//*[@id="form"]/ul[2]/li[2]/input[1]').send_keys('password')  # 输入密码 pawwod改成自己的密码
    browser.find_element_by_xpath('//*[@id="form"]/ul[2]/li[2]/input[2]').click()
    time.sleep(1)
    alert = browser.switch_to.alert  # 切换到弹窗
    alert.accept()  # 点击确定
    browser.find_element(By.XPATH, '//*[@id="time"]').clear()  # 清空测试时间栏
    browser.find_element(By.XPATH, '//*[@id="time"]').send_keys('1')  # 测试时间栏输入1分钟
    browser.find_element(By.XPATH, '//*[@id="form"]/ul[6]/li[2]/input').click()  # 点击开始测试按钮
    time.sleep(1)
    # input()
    # //*[@id="i_0"]/div/span
    # //*[@id="i_1"]/div/span
    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, 30)
            time.sleep(wait_time / 1000)  # 控制每次打字的间隔时间
            error_value = random.randint(1, 30)
            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):  # 进行退格操作
                    browser.find_element(By.XPATH, '''//*[@id="i_''' + str(i) + '''"]/input[2]''').send_keys(
                        Keys.BACKSPACE)
            browser.find_element(By.XPATH, '''//*[@id="i_''' + str(i) + '''"]/input[2]''').send_keys(j)