Python、Selenium实现问卷星自动填写(内含适配个人问卷的方法)

news2024/10/6 22:22:33

🧑‍💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。
📖所属专栏:Python实用教程


在这里插入图片描述


文章目录

  • 🌟效果预览
  • 🌟环境准备
    • selenium、payautogui安装
    • WebDriver谷歌浏览器驱动安装
  • 🌟具体代码
  • 🌟Selenium常用API
  • 🌟如何定位元素
  • 🌟写在最后

🌟效果预览

在这里插入图片描述

🌟环境准备

selenium、payautogui安装

Selenium:用于自动化web应用程序测试。它提供了一组API和库,使开发人员能够以编程方式控制浏览器并执行各种操作,如模拟用户的点击、输入文本、获取元素属性、处理JavaScript弹窗等。Selenium最初是为浏览器自动化测试而设计的,但在实际应用中,它也可以用于数据挖掘、网页抓取和自动化任务等其他方面。
PyAutoGUI:用于自动化鼠标和键盘操作的Python库。它提供了一组功能丰富的API,可以模拟用户在屏幕上的鼠标移动、点击、滚动以及键盘按键的操作。PyAutoGUI可以帮助开发人员实现各种自动化任务,如自动化测试、屏幕录制、图像识别等。

pip install selenium
pip install pyautogui

WebDriver谷歌浏览器驱动安装

驱动下载地址:webdriver
注意找到本地浏览器对应的版本
在这里插入图片描述


🌟具体代码

以下代码是单元题、矩阵多选题的代码,包含具体的代码注释。如果想修改成适用于个人问卷的代码,可参照定位元素方法的章节

# 引入相关模块
from selenium.webdriver.common.by import By
from selenium import webdriver
#随机数产生
import random 
#延时
import time
# 模拟人手,进行页面滚动
import pyautogui
####方法:题干————》选项####
#滚动方法,scroPx为滚动距离
def scrop(driver,scroPx):
  #滚动脚本
  js = "var q=document.documentElement.scrollTop=" + str(scroPx)
  #脚本执行
  driver.execute_script(js)
  #延时
  time.sleep(1)
  
#单选题
def single(driver):
  #页面中有10个单选题
  for j in range(1,11):
    #每个单选题所在的位置
    sinPro = driver.find_elements_by_css_selector(f'#div{j} > div.ui-controlgroup.column1')
    #每个单选题的答案进行遍历
    for answer in sinPro:
      #对应每个单选题的选项组合
      ansItem= answer.find_elements_by_css_selector('.ui-radio') 
      #随机点击选项
      random.choice(ansItem).click()
      #答题时间间隔
      time.sleep(random.randint(0,1))
#矩阵选择题,一个题
def juzhen(driver):
    #矩阵行数
    for i in range(1,6):
        #矩阵列数,
        index = random.randint(2, 6)
        #对应的每一个选项
        dan = driver.find_element_by_xpath(f"//tr[@id='drv8_{i}']/td[{index}]/a")
        #选择
        dan.click()
        time.sleep(random.randint(0, 1))
#脚本执行方法
def launch(nums):
    for i in range(0, nums):
        # 初始配置,问卷星地址
        url_survey = 'https://www.wjx.cn/vm/wY1vxPu.aspx'
        option = webdriver.ChromeOptions()
        option.add_experimental_option('excludeSwitches', ['enable-automation'])
        option.add_experimental_option('useAutomationExtension', False)
        # 本地下载的谷歌浏览器地址
        option.binary_location = r'C:\Program Files\Google\Chrome\Application\chrome.exe'
        # 下载好的Chrome驱动的地址
        driver = webdriver.Chrome(r"D:\chromedriver_win32\chromedriver.exe", options=option)
        driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',
                               {'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})
        # 启动要填写的地址
        driver.get(url_survey)
        #调用单选题方法
        single(driver)
        time.sleep(random.randint(0, 1))
        #涉及到多个矩阵题执行方法
        for k in range(4):
            method_name = f'juzhen{k}'
            method = globals()[method_name]
            method(driver)
        #调用滚动屏幕方法
        scrop(driver, 600) 
        #提交按钮
        driver.find_element_by_css_selector('#ctlNext').click()  # 找到提交的css并点击
        time.sleep(4)
        print('已经提交了{}次问卷'.format(int(i) + int(1)))
        time.sleep(4)
        driver.quit()#停止
  if __name__ == "__main__":
    #填写问卷次数
    launch(5)

🌟Selenium常用API

方法描述
find_element_by_id('element_id')通过元素的id属性查找元素
find_element_by_name('element_name')通过元素的name属性查找元素
find_element_by_class_name('class')通过元素的class属性查找元素
find_element_by_tag_name('tag')通过元素的标签名查找元素
find_element_by_link_text('text')通过链接文本查找超链接元素
find_element_by_partial_link_text('text')通过部分链接文本查找超链接元素
find_element_by_xpath('xpath_expression')通过XPath表达式查找元素
find_element_by_css_selector('css_selector')通过CSS选择器查找元素
click()点击元素
send_keys('text')向元素发送文本内容
clear()清空元素的内容
get('url')打开指定的URL
current_url获取当前页面的URL
title获取当前页面的标题
back()返回上一个浏览的页面
forward()前进到下一个浏览的页面
refresh()刷新当前页面
switch_to.frame('frame')切换到指定的iframe
switch_to.default_content()切换到默认的frame
switch_to.alert处理 JavaScript 弹窗
execute_script('script')在当前页面执行 JavaScript 代码

🌟如何定位元素

打开开发者工具,找到选项位置的具体代码,之后右击鼠标进行元素定位,点击copy复制到自己代码中即可。
在这里插入图片描述


🌟写在最后

最后感谢大家对本文的阅读,如有不足之处还望在评论区指点或者补充,感激不尽。


请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

有哪些好用的远程传输大文件的软件

随着网络技术的日益进步和普及,大文件远程传输已经成为了人们生活和工作中必不可少的一部分。然而,在远程传输大文件的过程中,经常会遇到传输速度慢、容易受到干扰等问题,因此需要一款高效、稳定、安全的大文件远程传输软件来解决…

CCF真题练习:202209-1如此编码

题目背景 某次测验后,顿顿老师在黑板上留下了一串数字 23333 便飘然而去。凝望着这个神秘数字,小 P 同学不禁陷入了沉思…… 题目描述 已知某次测验包含 n 道单项选择题,其中第 i 题(1≤i≤n)有 个选项,…

【Vue 面试题10道】我好像之前想过要写,不过之前JavaScript面试题比较多,就暂时略过了,这些应该几乎把常问的都包括了

博主:_LJaXi Or 東方幻想郷 专栏: 前端面试题 开发工具:Vs Code 本题针对 Vue2 这些几乎把常用的都包括了,问别的就没意思了,毕竟工作拧螺丝嘛 我都好久不用Vue了,不过用了React再回看Vue感觉好简单啊… 其…

数据库性能优化中的查询优化

数据库性能优化中的查询优化 概述 在数据库应用中,查询操作是最常见的操作之一。查询优化是数据库性能优化的关键一环,通过对查询语句和查询执行计划的优化,可以显著提高数据库系统的性能和效率。本文将介绍查询优化的相关知识,…

结构型模式 - 代理模式

概述 由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期…

Docker 基础知识解析:容器与传统虚拟化对比:资源利用、启动时间、隔离性和部署效率

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

Vscode配置grpc+c#+proto

首先是环境配置,用的dotnet5.0的sdk,所以Vscode的C#插件版本要选择1.24,然后需要配置C# Snippets、NuGget Package Manager、vscode-proto3、vscode-solution-extension(可选)。 以vscode-solution-extension为例新建A…

【大数据之Hive】二十四、HQL语法优化之任务并行度

1 优化说明 Hive的计算任务由MapReduce完成,并行度调整分为Map端和Reduce端。 1.1 Map端并行度 Map端的并行度及Map的个数,由输入文件的切片数决定,一般情况下Map端并行度不需要手动调整。   在特殊情况下(查询的表中存在大量小…

大数据学习03-Hive分布式集群部部署

系统环境:centos7 软件版本:jdk1.8、zookeeper3.4.8、hadoop2.8.5、hive1.1.0 一、下载安装 下载hive安装包,上传到linux服务器上, 解压安装包 tar -zxvf apache-hive-1.1.0-bin.tar.gz -C /home/local/重命名文件 mv apache-…

手机VPN的连接方法分享

1、首先在手机屏幕左右的滑动,找到手机的设置图标。 2、在打开的小米手机设置页面中点击“更多连接方式”的菜单项。 3、然后在打开的更多连接方式页面中点击VPN的菜单项。 4、在打开的VPN设置页面中点击“添加VPN”的按钮。 5、在打开的添加VPN的页面中输入VPN的信息后点击右…

Element-UI 实现动态增加多个不同类型的输入框并校验(双重v-for表单验证)

文章目录 前言定义表单格式表单渲染和验证扩展 前言 在做复杂的动态表单,实现业务动态变动,比如有一条需要动态添加的el-form-item中包含了多个输入框,并实现表单验证,但在element-ui组件库中给出的表单校验中没有这样的格式&…

简析三相电能预付费控制系统的设计与产品选型

摘要:介绍了一种电能预付费系统,主要用于三相动力用户。采用预付费控制器终端和电能表分离的方式,从原有电表读取相关数据用于比较,在尽量少改动原有接线的情况下安装预付费控制系统。采用安全性和稳定性高的RFID卡,数…

真正的理解WPF中的TemplatedParent

童鞋们在WPF中经常看到 TemplatedParent ,或者经常看到下面的用法: {Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content} 是不是看的一脸蒙圈? 先看官方文档: 意思是 和这个控件的 模板上的 父亲,如果这个控件不是模板创建的,那么这个值就…

Servlet 会话跟踪基础

文章目录 前言Cookie实例Cookie缺点Cookie案例代码 SessionSession的创建与销毁Session的创建Session的销毁 Session和Cookie的区别不同联系 前言 提示:这里可以添加本文要记录的大概内容: 在Web应用程序中,会话跟踪是一种技术,…

vue+element-ui通用后台管理系统(适合新手)

vueelement-ui通用后台管理系统(适合新手) 1、使用到的技术 使用vue2element-uiaxiosjs-cookielessecharts实现的一个简易的通用后台管理系统,具有很强的可扩展性,修改简单,只要有点前端基础就能看懂; 2…

汇编 -20230718

一. 练习: 1. 1-100的和 .text .globl _start_start:mov r0, #0 存放结果mov r1, #0 存放当前数mov r2, #100 结束条件的数addFun:add r1, r1, #1add r0, r0, r1cmp r1, r2bne addFunstop:b stop.end结果展示:

将DAST集成到CI/CD管道中的优势和实施步骤

在当今快速发展的网络环境中,维护Web应用程序的安全更加必要。由于漏洞的出现速度比以往任何时候都要快,将动态应用程序安全测试(DAST)集成到持续集成/持续部署(CI/CD)管道中成为改变游戏规则的因素&#x…

uni-app:单位像素rpx

rpx:响应式单位,长宽可以随着屏幕大小改变,其尺寸根据iPhone 6的标准来参考(750rpx为占满屏幕宽,1334rpx为占满屏幕长。7501334rpx) 例子: 现在展示型号为iPhone 12 pro的型号,这里750px和750…

利用大模型进行法律判决预测

概述 本文研究背景是法律专业人员常用的演绎推理方法,即法律演绎,用于案例分析。 过去的方法主要是通过学习、微调或示例来教授大型语言模型(LLM)进行法律判决预测。这些方法存在的问题是学习样本有限,解释性差。因此…

02 - 如何制定性能调优策略?

1、性能测试攻略 性能测试是提前发现性能瓶颈,保障系统性能稳定的必要措施。下面我先给你介绍两种常用的测试方法,帮助你从点到面地测试系统性能。 1.1、微基准性能测试 微基准性能测试可以精准定位到某个模块或者某个方法的性能问题,特别…