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

🧑‍💻作者名称: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.hqwc.cn/news/29379.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子锁语音芯片方案,低功耗声音提示ic,WT588F02B-8S

随着科技的不断发展,电子锁已成为现代社会中,安全性和便利性并存的必备设备。如何为电子锁行业增添智能化、人性化的功能已成为行业内的热门话题。 在这个迅速发展的市场中,深圳唯创知音推出了一款语音交互方案——WT588F02B-8S 低功耗声音提…

C# 细说async/await的用法

目录 一,引言 二,实例演示 2.1 多线程同步执行下载任务,任务完成后通知 2.2 异步执行下载任务,任务完成后通知 三,async/await的用法 3.1 跨线程修改UI控件 3.2 异步获取数据 一,引言 首先先来区分…

基于html2canvas和jspdf将document DOM节点转换为图片生成PDF文件,并下载到本地

这里要用到html2canvas将document DOM节点转换为图片,并下载到本地_你挚爱的强哥的博客-CSDN博客前端用原生js编辑文件内容→创建生成文件(格式可以自定义)→下载文件_你挚爱的强哥的博客-CSDN博客。会自动创建一个html文件。https://blog.csdn.net/qq_37860634/art…

解决 Qt 下载安装太慢的办法

Qt 现在新的版本都是采用在线安装,那速度实在是.... 找了一些方法,原理就是用 Fiddler 来代理,然后替换掉 url 成清华的镜像地址,这样就相当于直接从清华安装了,嘎嘎快 打开 Fiddler, 打开 Qt 安装程序,在…

安达发|某大厂使用APS计划排程真实成功案例

在很多群里、朋友圈、公众号上可以看到,很多精益咨询老师认为,不仅ERP不啥用,APS更是无聊之举,而且肯定是用不好的。但,事实上可能还真不是这样的。 一个深圳的客户,用了APS以后,不仅装配的齐套…

图论 并查集 模拟 位运算—题841、127、684、685、657、31、463、1356 C++实现与有向图 无向图 并查集总结

文章目录 841.钥匙和房间DFSBFS 127. 单词接龙684.冗余连接685.冗余连接II657. 机器人能否返回原点31.下一个排列463. 岛屿的周长解法1解法2 1356. 根据数字二进制下 1 的数目排序解法1解法2 注意点 图论:题841、127 并查集:题684、685 模拟:…

一百三十、海豚调度器——用DolphinScheduler定时调度HiveSQL任务

一、目标 用海豚调度器对Hive数仓各层数据库的SQL任务进行定时调度。比如,DWD层脱敏清洗表的动态插入数据、DWS层指标表的动态插入数据 二、工具版本 1、海豚调度器:apache-dolphinscheduler-2.0.5-bin.tar.gz 2、Hive:apache-hive-3.1.2…

完整的电商平台后端API开发总结

对于开发一个Web项目来说,无论是电商还是其他品类的项目,注册与登录模块都是必不可少的;注册登录功能也是我们在日常生活中最长接触的,对于这个业务场景的需求与逻辑大概是没有什么需要详细介绍的,市面上常见的邮箱注册…

PyCharm 常用快捷键

目录 1、代码编辑快捷键 2、搜索/替换快捷键 3、代码运行快捷键 4、代码调试快捷键 5、应用搜索快捷键 6、代码重构快捷键 7、动态模块快捷键 8、导航快捷键 9、通用快捷键 1、代码编辑快捷键 序号快捷键作用1CTRLALTSPACE快速导入任意类2CTRLSHIFTENTER代码补全3SHI…

关于你欠缺的NoSQL中的redis和mongoDB

文章目录 前言一、在string list hash结构中,每个至少完成5个命令,包含插入 修改 删除 查询,list 和hash还需要增加遍历的操作命令1、STRING类型2、List类型数据的命令操作:3、举例说明list和hash的应用场景,每个至少一…

数组的递归筛选

数组递归筛选 根据一个值筛选出来通过 includes 递归 const options [{name: "ikun",options: [{name: "YAY11",},],},{name: "YAY",}, ];function findValue(orgOptions,val) {let newArr1 []orgOptions.forEach(item>{if(item.options…

网络爬虫-网易易盾滑块验证码

首先打开易盾官网,依次单击“在线体验”和“滑块拼图”选项,出现如下图所示的滑块验证码,滑动后发现Network面板成功抓包。 如图所示 其中主要的加密参数可以看出来就是acToken以及cb 我们接着下断点往下走 我通过上图可以看到 acToken&#…