基于selenium自动化索引点击

小鹅快速刷题,根据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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/433765.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

9、Linux-安装JDK、Tomcat和MySql

目录 一、安装JDK 1、传输JDK文件&#xff08;.tar.gz&#xff09; 2、解压 3、备份环境变量 4、配置环境变量 5、重新加载环境变量 6、验证&#xff08;java -version&#xff09; 二、安装Tomcat 1、传输文件&#xff0c;解压到/usr/local 2、进入Tomcat的bin目录 …

如何从产品的角度做好内容营销?媒介盒子支招

内容运营就是指将生产传播内容并进行重组&#xff0c;去满足用户的内容消费需求&#xff0c;想要提高内容运营的效果&#xff0c;媒介盒子认为可以从产品出发&#xff0c;将内容运营与品牌产品相结合。那么应该怎么做呢&#xff1f;接下来就让媒介盒子告诉你。 一、 场景化内容…

Android岗面试,android内存优化面试题

前言 曾听过很多人说Android学习很简单&#xff0c;做个App就上手了&#xff0c;工作机会多&#xff0c;毕业后也比较容易找工作。这种观点可能是很多Android开发者最开始入行的原因之一。 在工作初期&#xff0c;工作主要是按照业务需求实现App页面的功能&#xff0c;按照设…

太惊艳了!多微信管理利器,让你事半功倍!

作为现代社交媒体的主要平台之一&#xff0c;微信在商务领域中扮演着重要的角色。为了提高我们的工作效率&#xff0c;微信管理系统应运而生。 这个系统可以同时登录多个微信账号&#xff0c;并进行统一管理。除了便捷的登录管理功能外&#xff0c;微信管理系统还提供了许多实…

达梦数据库使用数据库迁移工具弹窗报错“获取模式失败”的解决办法

在使用数据库迁移工具Data Transfer Service时&#xff0c;在下面这个页面点击下一步之后报错“获取模式失败” 为什么会失败呢&#xff1f;我们去看看报错 这里显示系统处于MOUNT状态&#xff0c;这可能是出错的原因。我们去查看数据库状态。 发现是mount状态。 因为mount状态…

薪资18K需要什么水平?来看看97年测试工程师的面试全过程…

我的情况 大概介绍一下个人情况&#xff0c;男&#xff0c;本科&#xff0c;三年多测试工作经验&#xff0c;懂python&#xff0c;会写脚本&#xff0c;会selenium&#xff0c;会性能&#xff0c;然而到今天都没有收到一份offer&#xff01;从年后就开始准备简历&#xff0c;年…

爬虫实战——伯克利新闻【内附超详细教程,你上你也行】

文章目录 发现宝藏一、 目标二、简单分析网页1. 寻找所有新闻2. 分析模块、版面和文章 三、爬取新闻1. 爬取模块2. 爬取版面3. 爬取文章 四、完整代码五、效果展示 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不…

【Leetcode每日一刷】数组|704. 二分查找、27. 移除元素

力扣每日刷题 一、704. 二分查找1.1、题目1.2、解题思路1.3、代码实现——C1.4、 总结&易错 二、27. 移除元素2.1&#xff1a;题目2.2、解题思路2.3、代码实现——C1.4、 总结&易错 一、704. 二分查找 1.1、题目 704. 二分查找 1.2、解题思路 题型&#xff1a;数组…

java工程师面试简历模板,2024谈一下当下最合适的Java架构

前言 这些算法&#xff0c;都是小编一点一点看的大佬们的方法&#xff0c;自己积累的. 如果有什么描述的不对的地方还望大佬赐教 多交流才能进步&#xff0c;加油&#xff0c;冲冲冲&#xff01;&#xff01;&#xff01; 目录 一、冒泡排序 二、选择排序 三、插入排序 四、快速…

【C++】递归 1241 - 角谷猜想 1108 - 正整数N转换成一个二进制数

文章目录 一、问题&#xff1a;1241 - 角谷猜想二、问题&#xff1a;1108 - 正整数N转换成一个二进制数三、总结四、感谢 一、问题&#xff1a;1241 - 角谷猜想 类型&#xff1a;有规律的循环、递归。 题目描述&#xff1a; 日本一位中学生发现一个奇妙的定理&#xff0c;请角…

Android岗大厂面试官常问的那些问题,2024年Android者未来的出路在哪里

前言 伟人曾经说过&#xff1a; 书是人类进步的阶梯 书中自有黄金屋&#xff0c;书中自有颜如玉 读书破万卷&#xff0c;下笔如有神 书是唯一不死的东西。 书籍是伟大的天才留给人类的遗产。 最近有很多朋友在我的公众号上提问“Android开发的经典入门教材和学习路线&#xff…

数据结构->链表分类与oj(题),带你提升代码好感

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青-CSDN博客 1.&#x1f34e;链表的分类 前面我们学过顺序表&#xff0c;顺序表问题&#xff1a; …

redis IO多路复用模型详解

一、IO 1.1、IO模型 我们常说的IO&#xff0c;指的是文件的输入和输出 &#xff0c;但是在操作系统层面是如何定义IO的呢&#xff1f;到底什么样的过程可以叫做是一次IO呢&#xff1f; 拿一次磁盘文件读取为例&#xff0c;我们要读取的文件是存储在磁盘上的&#xff0c;我们的…

window环境下使用k8s部署.net core项目

前提&#xff1a;已经部署镜像到Docker 在项目发布目录下新建.yaml文件&#xff0c;内容如下&#xff08;以下仅举例出两种方式内容&#xff0c;可按需自由配置&#xff09; --方式一(创建deployment 、服务、指定命名空间) # ------------------- 注意层级结构&#xff0c;…

【debug】element-ui时间控件回显后不可编辑且显示为空

问题&#xff1a;使用element-ui的时间控件回显数据&#xff0c;编辑数据没有反应&#xff1a;点时间和“确认”按钮都没反应。 输入框中会显示数据&#xff0c;但提交时的校验显示为空。 <el-form-item label"开始时间" prop"limitStartTime"><…

激光炸弹 刷题笔记

前置知识 二维前缀和 子矩阵的和 刷题笔记 {二维前缀和}-CSDN博客 思路 参考二维前缀和 将子矩阵的和 做成动态矩阵 一个个矩阵搜索 符合要求边长 矩阵中的元素和最大值 将x1,y1用i-k,j-k表示即可 x2,y2用i&#xff0c;j表示 代码 #include<iostream> #include<…

【定岗定编】某度假村酒店客房部定岗定编管理咨询项目纪实

该度假村酒店由于地域广阔&#xff0c;将客服部分为了四个不同区域&#xff0c;这样就导致了在不同的区域员工的接待量不均衡的状况&#xff0c;引起了员工的强烈不满。如何合理地配置客户部人员以及如何合理地鉴定员工的工作量成为该酒店所面临的两大难题。让我们来看看在人力…

【Linux】软件包管理器yum

目录 一、yum是什么&#xff1f; 二、查看软件包 三、安装与卸载软件 1、如何安装软件 2、如何卸载软件 四、yum源的配置 一、yum是什么&#xff1f; 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人…

2024作品集流行封面设计技巧

本期不是关于如何安排作品集&#xff0c;而是关于目前国内市场上流行的作品集封面风格有哪些&#xff1f;如何实现&#xff1f;今天给大家带来了 5 种作品集设计风格&#xff0c;毛玻璃、弥散光、3D、插画、其他&#xff0c;一起往下看吧&#xff01; 毛玻璃 目前许多设计师都…

学习统一的Hyper - network用于多模态MR图像合成和缺失模态的肿瘤分割

Learning Unified Hyper-Network for Multi-Modal MR Image Synthesis and Tumor Segmentation With Missing Modalities Learning Unified Hyper-Network for Multi-Modal MR Image Synthesis and Tumor Segmentation With Missing Modalities背景贡献实验方法多模态合成方法超…