基于selenium自动化索引点击

本文介绍了一种利用Python和Selenium库自动化处理在线测试题的方法,通过XPath定位题干和选项,结合fuzzywuzzy进行模糊匹配寻找答案,实现自动点击并更新题库的功能。
摘要由CSDN通过智能技术生成

小鹅快速刷题,根据selenium和xpath定位题干,使用模糊匹配fuzzywuzzy库查找题目匹配答案,自动点击,完成后更新题库

  1. 先导入基本包,准备好题库
from fuzzywuzzy import process
from selenium import webdriver
import pandas as pd 
from selenium.webdriver.common.by import By
#%%
data = pd.read_csv('data.csv', header=None)
Q = data[0].tolist()
A = data[1].tolist()
#%%
# 启动浏览器
# driver = webdriver.Chrome()
driver = webdriver.Edge()
driver.get('答题链接')
  1. 获取答题的题目和选项路径
    在这里插入图片描述
def ans(q_i):
    _click  = False
    if q_i <51 or q_i > 70:
        _q = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div/section/section/div[{}]/section/div[1]/div[1]/div/div/div/div/div/p'.format(q_i)).text
        _q_class = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div/section/section/div[{}]/section/div[1]/div[2]'.format(q_i)).text
    else:
        _q = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div/section/section/div[{}]/div/div[1]/div[1]/div/div/div/div/div'.format(q_i)).text
        _q_class = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div/section/section/div[{}]/div/div[1]/div[2]'.format(q_i)).text
    _a = A[Q.index(_q)] if _q in Q else A[Q.index(process.extractOne(_q, Q)[0])]
    print(q_i, _a, _q, _q_class)
    print(process.extract(_q, Q))
    _q_a = []
    if '单选题' in _q_class:
        for e in driver.find_elements(By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div/section/section/div[{}]/section/div[2]/div/label'.format(q_i)):
            _q_a.append(e.text)
            if e.text[0] in _a or _a in e.text:
                print('click'+e.text)
                _click = True
                e.click()
        print(_q_a)
    if '多选题' in _q_class:
        for e in driver.find_elements(By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div/section/section/div[{}]/section/div[2]/label'.format(q_i)):
            _q_a.append(e.text)
            for _c in _a:
                if _c in e.text:
                    print('click'+e.text)
                    _click = True
                    e.click()
        print(_q_a)
    if '判断题' in _q_class:
        _ = driver.find_elements(By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div/section/section/div[{}]/div/div[2]/div'.format(q_i))
        if '正确' in _a or '对' in _a or 'T' in _a:
            _[0].click()
            _click = True
            print("T")
        else:  
            _[1].click()    
            _click = True
            print("F")
    if '选择题' in _q_class:
        for e in driver.find_elements(By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div/section/section/div[{}]/section/div[2]/label'.format(q_i)):
            _q_a.append(e.text)
            for _c in _a:
                if _c in e.text:
                    print('click'+e.text)
                    _click = True
                    e.click()
        print(_q_a)
    if not _click:
        print('no click', q_i)
        print('=====================================================')
        raise Exception('no click')
import time, random
for i in range(1, 73):
    try:
        ans(i)
        time.sleep(random.randint(1, 5))
    except Exception as e:
        print(e)
  1. 每次更新题库
def record(q_i):
    if q_i <51 or q_i > 70:
        _q = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div[1]/section/div/section[2]/div[{}]/section/div[1]/div[1]/div/div/div/div/div/p'.format(q_i)).text
        _q_class = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div[1]/section/div/section[2]/div[{}]/section/div[1]/div[2]'.format(q_i)).text
    else:
        _q = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div[1]/section/div/section[2]/div[{}]/div/div[1]/div[1]/div/div/div/div/div/p'.format(q_i)).text
        _q_class = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div[1]/section/div/section[2]/div[{}]/div/div[1]/div[2]'.format(q_i)).text
    _a = A[Q.index(_q)] if _q in Q else A[Q.index(process.extractOne(_q, Q)[0])]
    if '单选题' in _q_class:
        _ans = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div[1]/section/div/section[2]/div[{}]/section/div[3]/div/div[2]/div/div[1]/span'.format(q_i))
    if '多选题' in _q_class:
        _ans = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div[1]/section/div/section[2]/div[{}]/section/div[3]/div/div[2]/div/div[1]/span'.format(q_i))
    if '判断题' in _q_class:
        _ans = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div[1]/section/div/section[2]/div[{}]/div/div[3]/div/div[2]/div/div[1]/span'.format(q_i))
    if '选择题' in _q_class:
        _ans = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div[1]/section/div/section[2]/div[{}]/section/div[3]/div/div[2]/div/div[1]/span'.format(q_i))
    print(q_i, _q, _ans.text)
    print(_a)
    return _q, _ans.text

q = []
a = []
for i in range(1, 73):
    _q, _a = record(i)
    q.append(_q)
    a.append(_a)
pd.DataFrame({'q':q, 'a':a}).to_csv('data_record.csv', index=False, header=False)
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值