【python】自动填写问卷星问卷及提交

news2025/7/10 16:27:13

前言:问卷是很好的网络调查方式之一,近年来,问卷星被广泛应用于各方面的调查。本文介绍了利用python代码自动填写问卷星基本题目,拥有自动填写、解决智能验证、批量提交问卷等功能。


 目录

1.下载浏览器驱动

2. selenium基本配置

 导入相关的包

实例化一个启动参数对象

其他设置 

设置驱动程序

3.答题代码

获取问卷内容

单选题

多选题

填空题

4.提交+智能验证

5.主函数


1.下载浏览器驱动

        python自动化填写问卷需要依赖浏览器驱动,这里使用的是谷歌浏览器,所以需要下载chromedriver,且下载的版本要和浏览器版本一致。

首先打开谷歌浏览器,点击“帮助”——“关于Google Chrome”,查看浏览器版本。如图:

 

 查看完版本后打开链接:CNPM Binaries Mirror下载对应系统对应版本的谷歌浏览器驱动。如图:

下载完成后会得到chromedriver.exe文件,此时将其复制到python工程目录文件夹中的venv文件夹中的Scripts文件夹下,如图:

2. selenium基本配置

       selenium本质是通过驱动浏览器,完全模拟浏览器的操作,就像真正的用户在操作一样。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。selenium库可以通过终端命令pip install selenium安装。

 导入相关的包

import random          # 用于产生随机数
import time            # 用于延时
from selenium.webdriver.common.by import By      #导入By包进行元素定位
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

实例化一个启动参数对象

#实例化一个启动参数对象
chrome_options = Options()

#添加启动参数
chrome_options.add_argument(
    'user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"')  # 添加请求头
chrome_options.add_argument('--disable-blink-features=AutomationControlled')

# 防止被识别
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])     #设置开发者模式启动

其他设置 

chrome_options.add_experimental_option('useAutomationExtension', False)    # 关闭selenium对chrome driver的自动控制

chrome_options.maximize_window()      # 网页最大化

#chrome_options.add_argument('headless')    #设置浏览器以无界面方式运行

设置驱动程序

browser = webdriver.Chrome(options=chrome_options)     #设置驱动程序,启动浏览器  (实现以特定参数启动)
browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',
                        {'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})       #用来执行Chrome开发这个工具命令

3.答题代码

定义一个run方法,并往方法里面添加内容。

获取问卷内容

browser.get('https://www.***.**/**/*****.aspx')        # 获取问卷信息(此处填问卷链接)

单选题

    # 问题1的点击 (性别)
    randomId = random.randint(1, 2)       # 随机点击第一个选项或第二个选项
    
    #js实现方式
    js = "document.getElementById(\"q1_" + str(randomId) + "\").checked = true"
    browser.execute_script(js)         #使用js实现点击的效果(调用js方法,同时执行javascript脚本)
    js = "document.getElementById(\"q1_" + str(randomId) + "\").click()"
    browser.execute_script(js)         #使用js实现点击的效果(调用js方法,同时执行javascript脚本)

    # 延时 太快会被检测是脚本
    time.sleep(1)


    # 问题2    (年龄)
    randomId = random.randint(2, 4)   # 随机数,5个多选框 随机点击
    # js实现方式
    js = "document.getElementById(\"q2_" + str(randomId) + "\").checked = true"
    browser.execute_script(js)
    js = "document.getElementById(\"q2_" + str(randomId) + "\").click()"    # 拼接字符串的方式 js找到对应id 点击按钮
    browser.execute_script(js)
    # 延时
    time.sleep(0.1)

多选题

    # 问题5    
    randomId = random.randint(1, 3)       # 随机数选择(选多少个)
    
    for i in range(1, randomId + 1):       # 循环 实现多选效果
        randomId1 = random.randint(1, 6)   #随机选择第1到第6个选项之一
        
        # 两种js实现方式
        js = "document.getElementById(\"q5_" + str(randomId1) + "\").checked = true"
        browser.execute_script(js)
        js = "document.getElementById(\"q5_" + str(randomId1) + "\").click()"
        browser.execute_script(js)
     
    # 延时
    time.sleep(1)

填空题


    # 问题25
    
    #自定义要填的内容
    block = ["定义第1个填空","定义第2个填空","定义第3个填空","定义第4个填空","定义第5个填空","定义第6个填空","无"]  
    
    #在上述内容中随机选择一个填入
    randomId = random.randint(0, 5)          #(数值下标从0开始)

    #在题目中随机输入上述内容
    browser.find_element_by_id("q25").send_keys(block[randomId])    
    
    # 延时
    time.sleep(0.1)

4.提交+智能验证

首先查看问卷源代码,并复制“提交”按钮的xpath,如图:

    #点击提交
    submit = browser.find_element_by_xpath("//*[@id='ctlNext']")    #网页源代码的xpath
    submit.click()      #点击
    
    #延时 太快会被检测是脚本
    time.sleep(0.5)
    # 模拟点击智能验证按钮
    # 先点确认
    browser.find_element(By.XPATH,"//button[text()='确认']").click()
    time.sleep(1)
    # 再点智能验证提示框,进行智能验证
    browser.find_element_by_xpath("//div[@id='captcha']").click()

5.主函数

if __name__ == "__main__":
    #批量提交问卷
    for i in range(10):          #运行一次提交10份问卷
         run()
         time.sleep(5)  # 避免提交过快 会出现验证
    

以上代码亲测有效,当短时间内刷的问卷数过多时,可能会出现第二重智能验证,这就要手动验证了哦,所以为了防止出现二重智能验证,在每提交完一份问卷后,要用time.sleep函数用于延时 , 避免提交过快。

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

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

相关文章

【Java 基础篇】Java 初识、编译运行机制及开发环境搭建

一、Java 语言初识二、Java 编译运行机制2.1 JVM、JRE、JDK 三大概念介绍2.2 Java 是如何运行的三、Java 开发环境搭建(文末附下载地址)四、第一个 Java 项目4.1 创建项目和 .Java 源文件4.2 输出 hello world一、Java 语言初识 Java 是由 Sun Microsystems 公司于 1995 年 5 …

十大经典排序算法(下)

🍓个人主页:bit.. 🍒系列专栏:Linux(Ubuntu)入门必看 C语言刷题 数据结构与算法 HTML和CSS3 目录 1.6 快速排序 1. 算法步骤 2. 动图演示 3.代码实现 1.7 堆排序 1. 算法步骤 2. 动图演示 3. 代码实现 1.8 计数排…

JavaScript注册监听事件与清除监听事件

JavaScript中有两种方法可以注册监听事件,一种是传统的注册方式,on事件名称的注册方法,如btn.onclick,还有方法监听事件注册方式, addEventListener()和ie8以下的attachEvent()。 注册监听事件 传统方式 语法格式:元…

ES6笔记————let,箭头函数,剩余参数

目录 一.let,var,const区别 let const 区别 二,解构 1 数组解构 2对象解构 三,箭头函数 1 基础语法 2 省略写法 3 对象方法里的this 4 apply/call调用时的this 5 箭头函数中this 8 箭头函数应用 四,剩余函数 一.let,var,con…

【bug】Failed at the node-sass@4.14.1 postinstall script(终于圆满解决)

花了两个小时才解决 首先是从git上克隆项目到本地,然后安装nodele_modules,输入npm i安装 安装到一半报错 npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! node-sass4.14.1 postinstall: node scripts/build.js npm ERR! Exit status 1 npm ERR! …

关于 Vue “__ob__:Observer“ 属性的解决方案

问题描述 我们操作 Vue 数据的时候,经常会看到这个属性: __ob__:Observer在我们操作这个数据的时候,如果想要单独拿这个数据里面的值,就会返回 undefined经过我在网上查找相关资料,发现 __ob__:Observer 是 Vue 中一个非常重要的…

【vue】diff 算法详解

一、diff算法是什么 diff算法是一种通过同层的树节点进行比较的高效算法 diff算法的目的就是找出新旧不同虚拟DOM之间的差异,使最小化的更新视图,所以 diff 算法本质上就是比较两个js对象的差异 特点 1. 比较只会在同层级进行,不会跨层级比较 2. 在diff…

原生JS实现飞机大战游戏 超详细解析 快来做一个自己玩吧

目录 1. 案例分析💨 2. 适配设备 💨 3. 背景滚动💨 4. hero操作💨 5. 敌机的创建与运动💨 6. 子弹的创建与运动💨 7. 碰撞检测💨 8. 统计得分💨 9. 设置开始与结束界面&…

疫情散去想看电影,使用css3动画实现一个阿凡达2完美开场

在历经了艰苦卓绝的3年抗疫后,疫情终于还是来了,很多小伙伴变成了小洋人酸奶,我相信过不了多少天,疫情终将散去,那个时候就可以和家人走进电影院啦。 今天用css布局一个阿凡达2的影院场景,提前过一过瘾。 目…

《uni-app》表单组件-form表单

本文分享的Form组件为uni-app的内置组件Form,非扩展组件,两者在用法上其实大同小异,只是扩展组件的属性以及事件更多…没有本质上的区别~ 《uni-app》表单组件-form表单一. 简介二. 基础用法三. submit事件四. reset事件五. repor…

Tomcat安装配置及IDEA配置方法【亲测有效】

Tomcat安装配置及IDEA配置1.下载Tomcat2.配置Tomcat环境变量3.安装Tomcat4.启动Tomcat5.测试Tomcat6.IDEA配置Tomcat1.下载Tomcat Tomcat9官网下载地址 选择自己需要的版本,一般选择Windows 64位压缩包版本: 下载完后安装解压即可,解压后的…

如何使用nvm切换node版本

我比较懒惰,如非必要,不喜欢npm版本切换来切换去,感觉浪费我编程的时间.后来发现,现在偷的懒都是为将来的忙碌埋下的祸根. 言归正传,本文主要是讲解一下,如何使用nvm进行npm版本的切换. 工欲善其事必先利其器,我们先下载nvm;直接上下载链接(针对windows哈,毕竟我没mac本); 下载…

Code For Better 谷歌开发者之声——初识Web与谷歌,拉起兴趣之心。

个人名片: 博主:酒徒ᝰ. 个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。 本篇励志:程序是我的生命,但我相信爱她甚过爱我的生命。 目录一、了解谷歌浏览器1. 简介2.优点二、认识Web1. 简介2. 特点2. 网…

【云原生 | 21】Docker运行Web服务实战之Apache

作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道第一名🏅 阿里云ACE认证高级工程师🏅 ✒️个人主页:小鹏linux 💊个人社区:小鹏linux(个人社区)欢…

【微信小程序】如何获得自己当前的定位呢?本文利用逆地址解析、uni-app带你实现

目录 前言 效果展示 一、在腾讯定位服务配置微信小程序JavaScript SDK 二、使用uni-app获取定位的经纬度 三、 逆地址解析,获取精确定位 四、小提示 前言 效果展示 一、在腾讯定位服务配置微信小程序JavaScript SDK 在浏览器搜索腾讯定位服务,找…

React(四) ——hooks的使用

🧁个人主页:个人主页 ✌支持我 :点赞👍收藏🌼关注🧡 文章目录⛳React Hooks💸useState(保存组件状态)🥈useEffect(处理副作用)🔋useCallback(记忆函数&#…

Sass 和 SCSS

▣Sass (Syntactically Awesome StyleSheets),是由buby语言编写的一款css预处理语言,和html一样有严格的缩进风格,和css编写规范有着很大的出入,是不使用花括号和分号的,所以不被广为接受。 Sass 是一款强化 CSS 的辅助…

使用Nodejs搭建HTTP服务,并实现公网远程访问「内网穿透」

文章目录前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口5.固定公网地址前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation(原…

微信小程序|基于小程序+云开发制作一个菜谱小程序

今天吃什么?这是一个让强迫症左右为难的问题,跟随此文基于小程序+云开发制作一个菜谱小程序,根据现有食材一键生成菜谱,省心又省力。 一、小程序1. 创建小程序</

【python】喜欢XJJ?这不得来一波大采集?

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 俗话说的好&#xff1a;技能学了~就要用在自己喜欢得东西上&#xff01;&#xff01; 这我不得听个话~我喜欢小姐姐&#xff0c;跳舞的小姐姐 这不得用python把小姐姐舞采集下来~嘿嘿嘿 完整源码、素材皆可点击文章下方名片…