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

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

🌟效果预览


image.gif


🌟环境准备


selenium、payautogui安装


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

PyAutoGUI:用于自动化鼠标和键盘操作的Python库。它提供了一组功能丰富的API,可以模拟用户在屏幕上的鼠标移动、点击、滚动以及键盘按键的操作。PyAutoGUI可以帮助开发人员实现各种自动化任务,如自动化测试、屏幕录制、图像识别等。

pip install selenium
pip install pyautogui


WebDriver谷歌浏览器驱动安装


驱动下载地址:webdriver

注意找到本地浏览器对应的版本

903b8a8a791d8785a7b8462439f406ba_4f3d1843f0fc4747a78217f4123823b8.png


🌟具体代码


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

# 引入相关模块
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复制到自己代码中即可。

4e03d3aa2a5dd7042ceb462b3fd463e8_137bc14c1e1d480a887486d296849d50.png


🌟写在最后


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



目录
相关文章
|
7月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
538 1
|
8月前
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
289 2
|
8月前
|
调度 Python
微电网两阶段鲁棒优化经济调度方法(Python代码实现)
微电网两阶段鲁棒优化经济调度方法(Python代码实现)
230 0
|
8月前
|
传感器 大数据 API
Python数字限制在指定范围内:方法与实践
在Python编程中,限制数字范围是常见需求,如游戏属性控制、金融计算和数据过滤等场景。本文介绍了五种主流方法:基础条件判断、数学运算、装饰器模式、类封装及NumPy数组处理,分别适用于不同复杂度和性能要求的场景。每种方法均有示例代码和适用情况说明,帮助开发者根据实际需求选择最优方案。
404 0
|
8月前
|
Python
Python字符串center()方法详解 - 实现字符串居中对齐的完整指南
Python的`center()`方法用于将字符串居中,并通过指定宽度和填充字符美化输出格式,常用于文本对齐、标题及表格设计。
|
9月前
|
Web App开发 存储 前端开发
Python+Selenium自动化爬取携程动态加载游记
Python+Selenium自动化爬取携程动态加载游记
|
7月前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
1153 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
9月前
|
安全 Python
Python语言中常用的文件操作方法探讨
通过上述方法的结合使用,我们可以构筑出强大并且可靠的文件操作逻辑,切实解决日常编程中遇到的文件处理问题。
336 72
|
7月前
|
SQL 测试技术 数据库
healenium+python+selenium
上次介绍了如何利用healenium+java+selenium来实现selenium的自愈,这次介绍如何healenium+python+selenium。关于healenium+python+selenium网上资料更少,并且甚至是错误的。在著名的书籍《软件测试权威指南中》也是有一定问题的。现在介绍如下
425 4
|
10月前
|
存储 机器学习/深度学习 人工智能
稀疏矩阵存储模型比较与在Python中的实现方法探讨
本文探讨了稀疏矩阵的压缩存储模型及其在Python中的实现方法,涵盖COO、CSR、CSC等常见格式。通过`scipy.sparse`等工具,分析了稀疏矩阵在高效运算中的应用,如矩阵乘法和图结构分析。文章还结合实际场景(推荐系统、自然语言处理等),提供了优化建议及性能评估,并展望了稀疏计算与AI硬件协同的未来趋势。掌握稀疏矩阵技术,可显著提升大规模数据处理效率,为工程实践带来重要价值。
494 58

推荐镜像

更多
下一篇
开通oss服务