当前位置: 首页 > news >正文

Python制作自动填写脚本,100%准确率

前言

环境使用

  • Python 3.8
  • Pycharm

模块使用

  • import requests —> 数据请求模块 pip install requests
  • import parsel —> 数据解析模块 pip install parsel
  • from selenium import webdriver —> 自动测试模块 pip install selenium==3.141.0

本次案例代码实现思路:

  1. 打开考试网站
  • selenium --> 浏览器驱动 --> 操作浏览器 <模拟人的行为做操作浏览器>
  1. 获取答案
  • 获取答案网站链接
  • 获取问题以及答案内容
  1. 对比题目以及答案 选出正确答案
  • 获取问题答案选项
  • 和正确的答案进行对比
  • 如果正确答案和选择答案一致, 那就进行点击
  1. 进行点击答题

最终效果

代码实现

导入模块

from selenium import webdriver
# 导入数据请求模块
import requests
# 导入数据解析模块
import parsel

打开浏览器 webdriver.Chrome(‘驱动路径’)

  1. 驱动和代码放在一起
  2. 驱动文件和python安装目录放在一起
driver = webdriver.Chrome(r'D:\download\anaconda\chromedriver.exe')
# 设置全屏
driver.maximize_window()

输入网址

driver.get('https://www.jsyks.com/kmy-mnks')

获取问题及答案

lis = driver.find_elements_by_css_selector('div.Exam ul li')
page = 1
# for循环遍历, 提取列表里面的元素
for li in lis:
    # 获取属性
    answer_id = li.get_attribute('c')  #  答案链接的ID
    # https://tiba.jsyks.com/Post/8f0e0.htm
    answer_url = f'https://tiba.jsyks.com/Post/{answer_id}.htm'
    # 获取答案以及问题  --> <Response [200]> 表示请求成功
    response = requests.get(url=answer_url)
    # 获取网页内容 --> 提取答案以及问题内容  转换数据类型
    selector = parsel.Selector(response.text)
    # 获取问题 --> 把问题和答案保存数据库保存 直接比较答案, 自己建立问题库, 从问题找答案
    question = selector.css('#question h1 strong a::text').get()
    # 获取答案
    answer = selector.css('#question h1 u::text').get()

点击判断

if answer == '错':
    # 把答案内容改成 错误  重新赋值一下
    answer = '错误'
#  # 如果答案内容是对的话
elif answer == '对':
    # 把答案内容改成正确重新赋值一下
    answer = '正确'
# 获取问题选项内容 --> b标签 全部获取下来  b标签是在li标签里面  driver 表示整个网页
bs = li.find_elements_by_css_selector('b')
num = 1
for b in bs:
    # 获取b标签文本
    choose = b.text
    # 判断如何答案比两个元素多的, 就取一个元素
    if len(choose) > 2:
        # [0]提取 字符串里面第一个元素
        choose = choose[0]
    # 进行对比 选项和答案一致 是否一模一样
    if choose == answer:
        # 点击选项 --> 定位到点击那个元素 LI1 --> 1 表示第一题  b:nth-child(3) 表示第一个答案
        driver.find_element_by_css_selector(f'#LI{page} b:nth-child({2+num})').click()
        print('点击了')
    else:
        print('选项是', choose, '答案是', answer)
    print(choose)
    num +=1
page += 1

点击提交试卷

如果过快,可能程序还没找到元素 <网页还没加载元素出来, 你就直接点了, 可能报错>

driver.find_element_by_css_selector('div.ExamBtn u.btnJJ').click()
👇问题解答 · 源码获取 · 技术交流 · 抱团学习请联系👇

相关文章:

  • 半小时了解SQL注入漏洞?(注入方式大全+绕过大全)
  • CSS 几种常见的选择器
  • 【Day17】Java算法刷题 【面试题 01.08. 零矩阵】 【844. 比较含退格的字符串】
  • 【C++游戏引擎Easy2D】Random随机数,不同于Rand,做游戏必备
  • 【小程序入门】App函数注册小程序实例
  • 【Linux从0到1】第十七篇:高级IO
  • 一起来做个CH347的项目(应用于FPGA、CPLD、MCU)
  • 特征筛选还在用XGB的Feature Importance?试试Permutation Importance
  • 06-ServletRequest
  • Spring Cloud Alibaba系列之nacos:(4)配置管理
  • 一篇五分生信临床模型预测文章代码复现——Figure 3. 基因富集分析(二)
  • 深度学习——day34 读论文:深度 ReLU 网络在特征提取和泛化中的深度选择(2022 Q1)
  • STM32G474产生一个锯齿波
  • 蓝队视角下的防御体系怎样进行突破
  • 排序算法 | 快排、冒泡、堆排、归并、基数、递归、希尔、计数
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • AWS实战 - 利用IAM对S3做访问控制
  • Java精华积累:初学者都应该搞懂的问题
  • Java应用性能调优
  • Laravel 中的一个后期静态绑定
  • Odoo domain写法及运用
  • session共享问题解决方案
  • Terraform入门 - 1. 安装Terraform
  • 分布式熔断降级平台aegis
  • 理解在java “”i=i++;”所发生的事情
  • 如何实现 font-size 的响应式
  • 手写双向链表LinkedList的几个常用功能
  • 微服务入门【系列视频课程】
  • 用Visual Studio开发以太坊智能合约
  • Linux权限管理(week1_day5)--技术流ken
  • RDS-Mysql 物理备份恢复到本地数据库上
  • # 飞书APP集成平台-数字化落地
  • ###STL(标准模板库)
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (1)STL算法之遍历容器
  • (11)MSP430F5529 定时器B
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (利用IDEA+Maven)定制属于自己的jar包
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .net反混淆脱壳工具de4dot的使用
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • [ 数据结构 - C++] AVL树原理及实现
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [bug总结]: Feign调用GET请求找不到请求体实体类
  • [flink总结]什么是flink背压 ,有什么危害? 如何解决flink背压?flink如何保证端到端一致性?
  • [Go WebSocket] 多房间的聊天室(三)自动清理无人房间