Python+Selenium实现自动填写问卷

 更新时间:2023年07月19日 09:33:38   作者:DaenCode  
本文主要介绍了Python+Selenium实现自动填写问卷,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

🌟效果预览

🌟环境准备

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复制到自己代码中即可。

🌟写在最后

到此这篇关于Python+Selenium实现自动填写问卷的文章就介绍到这了,更多相关Python Selenium自动填写问卷内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • tensorflow安装成功import tensorflow 出现问题

    tensorflow安装成功import tensorflow 出现问题

    这篇文章主要介绍了tensorflow安装成功import tensorflow 出现问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 用python 实现在不确定行数情况下多行输入方法

    用python 实现在不确定行数情况下多行输入方法

    今天小编就为大家分享一篇用python 实现在不确定行数情况下多行输入方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 使用Python和Pillow库开发图片转GIF工具的完整流程

    使用Python和Pillow库开发图片转GIF工具的完整流程

    这篇文章主要介绍了使用 Python 和 Pillow 库开发图片转 GIF 工具的完整流程,工具支持多格式图片输入、自定义帧率、统一图片尺寸及设置循环次数等核心功能,采用命令行参数解析实现便捷操作,需要的朋友可以参考下
    2025-10-10
  • 详解C++编程中一元运算符的重载

    详解C++编程中一元运算符的重载

    这篇文章主要介绍了C++编程中一元运算符的重载,特别对递增和递减运算符重载作了着重讲解,需要的朋友可以参考下
    2016-01-01
  • python xlsxwriter库生成图表的应用示例

    python xlsxwriter库生成图表的应用示例

    这篇文章主要介绍了python xlsxwriter库生成图表的应用示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • python实现粒子群算法

    python实现粒子群算法

    这篇文章主要介绍了python如何实现粒子群算法,帮助大家更好的进行机器学习,感兴趣的朋友可以了解下
    2020-10-10
  • python中itertools模块zip_longest函数详解

    python中itertools模块zip_longest函数详解

    itertools模块包含创建高效迭代器的函数,这些函数的返回值不是list,而是iterator(可迭代对象),可以用各种方式对数据执行循环操作,今天我们来详细探讨下zip_longest函数
    2018-06-06
  • keras多显卡训练方式

    keras多显卡训练方式

    这篇文章主要介绍了keras多显卡训练方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python 中pass和match使用方法

    python 中pass和match使用方法

    这篇文章主要介绍了python中pass和match使用方法,​pass​​ 语句不执行任何操作。语法上需要一个语句,但程序不实际执行任何动作时,可以使用该语句
    2022-08-08
  • Python 类和对象详细介绍

    Python 类和对象详细介绍

    这篇文章主要介绍了Python 类和对象详细介绍,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-06-06

最新评论