Python Selenium 问卷星自动填写

使用Python的Selenium库自动填写问卷星模板的详细步骤:通过Chrome浏览器驱动访问问卷,利用XPath定位元素,执行点击和输入操作,最后提交问卷。注意事项包括匹配Chromedriver版本和可见元素定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从问卷星网站找的一个模板

编写思路大致是这样
  1. 谷歌浏览器驱动器打开问卷网址https://www.wjx.cn/jq/82201411.aspx
  2. xpath定位网页元素 driver.find_element_by_xpath
  3. 对元素进行操作,有点击click和填入send_keys
  4. 最后点击提交问卷//*[@id="submit_button]结束
  5. 若想要多份问卷写个循环套外面即可
注意事项
  1. 要下载相应版本的Chormedriver放在python文件夹里做驱动
  2. 填写问卷时,定位元素只能定位到可视化区域,看不见的需要将浏览器向下拉动,
    js="var q=document.documentElement.scrollTop=800" #下拉像素(800是基于最顶端测算的距离) driver.execute_script(js) #执行下拉像素操作
网页定位元素操作步骤
  1. F12弹框开发者界面,左键单击左上角标志
    在这里插入图片描述
  2. 选择定位元素,鼠标左键单击
    在这里插入图片描述
  3. 右键灰色区域
    在这里插入图片描述
    Copy->CopyXPath 复制到粘贴板
from selenium import webdriver
import random
import time

def selection(*a): #单选题 输入参数为任意个数str(xpath) 返回值为某一随机str(xpath)
    n = len(a)
    num = random.randint(1,n)
    for i in range(1,n+1,1):
        if(i==num):
            return a[num-1]

hours = selection('5', '10', '15', '20')
money = str(random.uniform(1500, 2500))
time = selection('一个月','两个月','三个月','四个月','五个月','六个月','一年','两年','三年')
month_money = selection('200','500'
### 使用Python Selenium自动填写问卷问卷 为了实现这一目标,通常会采用Selenium WebDriver来控制浏览器完成一系列交互动作。下面是一个简化版的例子,展示了如何设置环境并编写脚本自动填充问卷。 #### 安装依赖包 首先需要安装`selenium`以及对应的WebDriver驱动程序。对于Chrome浏览器来说,可以使用如下命令通过pip工具安装必要的软件包: ```bash pip install selenium webdriver_manager ``` 接着下载对应版本的chromedriver,并将其路径配置到系统的PATH环境中或者直接指定给webdriver.Chrome()方法[^1]。 #### 初始化浏览器实例 创建一个新的Chrome浏览器对象用于后续的操作,在此之前可以通过选项类来自定义启动参数比如无头模式(headless),禁用GPU加速等特性以提高效率减少资源占用: ```python from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service as ChromeService from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC service = ChromeService(executable_path=ChromeDriverManager().install()) options = webdriver.ChromeOptions() # options.add_argument('--headless') # Uncomment this line to run in headless mode. driver = webdriver.Chrome(service=service, options=options) ``` #### 访问网站并定位元素 打开目标网页链接之后,可以根据页面结构分析HTML源码找到各个表单项所关联的选择器(selector),进而调用find_element系列接口获取DOM节点引用以便进一步处理: ```python url = 'https://www.wjx.cn/questionnaire/...' # Replace with actual URL of the form you want to fill out. try: driver.get(url) wait = WebDriverWait(driver, timeout=10).until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".field-item")) ) elements = driver.find_elements(By.CLASS_NAME, "field-item") except Exception as e: print(f"An error occurred while loading page or finding elements: {e}") finally: pass ``` #### 自动化输入数据 遍历所有可编辑区域逐个填入预设好的答案字符串;针对单选框、多选框则需额外判断其状态再决定是否点击勾选; 对于下拉列表类型的控件可能还需要模拟展开菜单后再选取特定项: ```python answers = ["answer_1", "answer_2"] # List containing your predefined answers here. for index, element in enumerate(elements[:len(answers)]): # Limit loop count by length of provided answers list. try: input_field_type = element.tag_name.lower() if input_field_type == "input": element.clear() element.send_keys(answers[index]) elif input_field_type == "select": # Handle dropdown lists separately. select_box = Select(element) option_value_to_choose = f"value_{index}" # Define logic for selecting specific value from drop-down menu. select_box.select_by_visible_text(option_value_to_choose) else: continue except StaleElementReferenceException: break except NoSuchElementException: continue ``` #### 提交表单 当所有的必答题都已经被正确作答完毕后就可以寻找提交按钮执行最终的动作了。需要注意的是某些情况下可能会存在验证码机制阻止机器人行为的发生,此时就需要引入图像识别技术或者其他手段绕过验证环节[^2]: ```python submit_button_locator = (By.XPATH, "//button[@type='submit']") wait.until(EC.element_to_be_clickable(submit_button_locator)) submit_btn = driver.find_element(*submit_button_locator) if submit_btn.is_enabled(): submit_btn.click() else: raise ValueError("Submit button is not enabled.") ``` 以上就是关于怎样运用Python配合Selenium框架来进行在线问卷自动填写的大致流程介绍。实际项目开发过程中还需考虑更多细节问题如异常捕获重试逻辑设计、日志记录功能集成等方面的工作。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值