python自动填写问卷星问卷以及提交问卷等功能

我会为您详细讲解如何利用Python实现自动填写问卷星问卷并提交问卷的两种方法。

方法一:使用selenium库模拟人工操作

  1. 确认所要填写的问卷星问卷的URL,保存到一个变量中:
url = "https://www.wjx.cn/..."
  1. 使用selenium库打开浏览器(需要预先安装好对应的浏览器驱动),访问问卷星问卷网址:
from selenium import webdriver

driver = webdriver.Chrome() # 这里以Chrome浏览器为例,需先下载对应驱动
driver.get(url)
  1. 输入问卷的全部选项或问答内容,可通过查看DOM元素获取需要的元素标签或属性(以单选题为例):
from selenium.webdriver.common.keys import Keys

# 获取单选框按钮元素
radio_buttons = driver.find_elements_by_css_selector("ul[role='radiogroup'] li label input")

# 遍历单选框按钮,模拟操作选择选项
for radio in radio_buttons:
    if radio.get_attribute('value') == '1': # 假设选项1为正确答案
        radio.click()
        break
  1. 提交问卷
submit_button = driver.find_element_by_css_selector("button.submitbutton")
submit_button.click()

# 关闭浏览器
driver.quit()

方法二:通过模拟网络请求实现自动填写问卷星问卷

  1. 确认所要填写的问卷星问卷的URL和问卷的ID,保存到变量中(ID为问卷星生成的识别id):
url = "https://www.wjx.cn/..."
wjx_id = "52633322"
  1. 分析接口,获取问卷题目信息和默认答案
import requests
import json

response = requests.get(f"https://www.wjx.cn/joinnew/processjq.ashx?curid={wjx_id}&starttime={int(time.time()*1000)}")
data = json.loads(response.text)

questions = [] # 保存问卷题目信息和默认答案

for table in data['Tables']:
    for row in table['Rows'][1:]:
        question = {}
        answer = ""

        for cell in row['Cells']:
            if cell['Column']['ColumnName'] == "QuestionName":
                question['title'] = cell['Answer']
            elif cell['Column']['ColumnName'] == "Type":
                question['type'] = cell['Answer']
            elif cell['Column']['ColumnName'] == "Require":
                question['required'] = cell['Answer']

        try:
            # 多选题、填空题等可能有默认答案,需判断
            answers = row['Cells'][-1]['Data'].split(',')
            if answers[0] != '':
                answer = answers
        except:
            pass

        question['answer'] = answer
        questions.append(question)

print(questions)
  1. 模拟post请求提交问卷
data = {
    'submitdata': '',
    't': int(time.time()*1000),
    'pyid': '',
    'wjxid': wjx_id,
    'curID': wjx_id,
    'newSid': '0',
    'temp': '0',
    'sms': '',
    'isCheckCode': '',
    'checkCode': '',
    'tj': '{" latitude":""," longitude":""}',
    'scroll': '0',
    'submittype': '1',
    'ktm': ''
}

# 根据分析的接口,包装要提交的答案
for question in questions:
    if question['type'] == "1": # 单选题类型
        data['submitdata'] += f"{question['title']}${question['answer'][0]},"
    elif question['type'] == "2": # 多选题类型
        data['submitdata'] += f"{question['title']}$:"

        for answer in question['answer']:
            data['submitdata'] += f"{answer},"
        data['submitdata'] = data['submitdata'][:-1] + ';'
    elif question['type'] == "3": # 填空题类型
        data['submitdata'] += f"{question['title']}${question['answer'][0]},"
    elif question['type'] == "4": # 问答题类型
        data['submitdata'] += f"{question['title']}${question['answer'][0]},"

post_response = requests.post("https://www.wjx.cn/joinnew/processjq.ashx", data=data)
print("提交成功") if post_response.status_code == 200 else print("提交失败")

以上就是两种自动填写问卷星问卷的方法,可以根据实际需求选择使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python自动填写问卷星问卷以及提交问卷等功能 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python+opencv 实现图片文字的分割的方法示例

    导入必要的库 在使用Python+opencv实现图片文字的分割之前,首先要导入必要的库。通常需要使用的库包括cv2、numpy、PIL和matplotlib,其中cv2为opencv对Python的接口。 import cv2 import numpy as np from PIL import Image import matplotlib.pyplot…

    python 2023年5月19日
    00
  • python 制作手机归属地查询工具(附源码)

    Python制作手机归属地查询工具攻略 在Python中,我们可以使用requests库和正则表达式来制作一个简单的手机归属地查询工具。本文将详细讲解如何使用Python制作手机归属地查询工具,并提供两个示例。 环境配置 在使用Python制作手机归属地查询工具之前,我们需要先进行环境配置。以下是环境配置的步骤: 安装requests库 可以使用pip命令来…

    python 2023年5月15日
    00
  • 详解Python对一个元组按值排序

    接下来我将为您详细讲解如何使用Python对一个元组按值排序的方法,以下是完整的攻略过程: 一、定义一个元组 首先,我们需要定义一个元组来进行排序,可以使用以下方式定义一个元组,并添加一些数据: tup = (4, 2, 7, 1, 3, 5) print("原始元组:", tup) 输出结果如下: 原始元组: (4, 2, 7, 1, …

    python-answer 2023年3月25日
    00
  • python判断一个对象是否可迭代的例子

    判断一个对象是否可迭代是Python中常见的一个问题,下面来详细说明如何判断一个对象是否可迭代。 能否使用 for 循环遍历 使用 for 循环可以遍历一个可迭代对象,所以判断一个对象是否可迭代,可以尝试使用 for 循环来遍历这个对象。如果能够正常遍历,就说明这个对象可迭代。 下面是一个示例代码: items = [2, 4, 6] for item in…

    python 2023年6月3日
    00
  • Python使用百度API上传文件到百度网盘代码分享

    下面是详细讲解“Python使用百度API上传文件到百度网盘代码分享”的完整攻略。 介绍 百度网盘是百度提供的一项云存储服务,它允许用户上传、下载和分享文件。Python提供了与百度网盘API交互的方式,使得开发者可以通过Python脚本实现文件的上传、下载和管理。 本攻略将介绍如何使用Python的百度云盘API来上传文件到百度网盘。下面我们将分为以下几个…

    python 2023年6月3日
    00
  • Python常见格式化字符串方法小结【百分号与format方法】

    下面是Python常见格式化字符串方法小结的完整攻略。 Python常见格式化字符串方法小结【百分号与format方法】 介绍 在Python中,格式化字符串是一个经常用到的功能。Python提供了两种常见的格式化字符串方法,分别是百分号(%)方法和format方法。这两种方法可以让我们方便地将变量、常量等数据组合成字符串,有很广泛的应用场景。本文将对这两种…

    python 2023年6月5日
    00
  • Python实现嵌套列表去重方法示例

    Python实现嵌套列表去重方法示例 在Python中,我们可以使用set()函数和递归的方法来去重嵌套列表。本攻略将详介绍如何去重嵌套列表。 使用set()函数去重嵌套列表 以下是一个示例代码,演示如何使用set()函数去重嵌套列表: # 使用set()函数去重嵌套列表 nested_list = [[1, 2], [2, 3], [1, 2]] flat…

    python 2023年5月13日
    00
  • Matplotlib中文乱码的两种详细解决方案

    Matplotlib中文乱码问题是使用Matplotlib绘图时比较常见的问题。本文将介绍Matplotlib中文乱码问题的两种详细解决方案,以供参考。 方案一:修改Matplotlib配置文件 打开Matplotlib配置文件matplotlibrc,可以通过以下代码查看文件路径: import matplotlib print(matplotlib.ma…

    python 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部