Python自动填写网上问卷

Python开发软件为PyCharm(安装教程),浏览器使用Chrome,需要用到谷歌驱动。

谷歌浏览器和谷歌驱动到官网下载,到网速感人。。提供Google浏览器及驱动下载(驱动安装到python安装目录下即可使用)

1.使用python启动浏览器

        Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

"""使用python启动浏览器"""
from selenium import webdriver

         使用Chrome浏览器打开问卷,以“辽宁省本科市场营销专业大四学生毕业去向意愿调查”为例

# 使用浏览器驱动 启动一个浏览器
driver = webdriver.Chrome()
# 操作浏览器打开一个网页
driver.get('https://www.wjx.cn/jq/49350955.aspx')

        在选择过程中,使用的是css选择器。

      第一步:

        找到所有问题的标签(按F12查看),即选择问题的类标签

# 第一步 找到所有的标签,选择类标签
answers = driver.find_elements_by_css_selector('.div_question')

      第二步:

        遍历得到的所有问题,找到每个问题下的选项标签,这时我们随机选择一个回答标签即可。

        在随机选择选项的时候,会遇到三个主要的问题:

        1.需要实现滑动,问题可见才能实现点击答案;同时我们也会遇到一些跳跃性的问题,比如前面问题选择不同的答案,会导致后面出现回答不同的问题,这时还是使用滑动可见再去点击就可解决(可在上面的问卷中手动尝试一下,第三题选择不同的答案会导致后面的问题发生变化);

        2.在选择过程中,如果随机选到“其他”,这时后面会出现一个文本框,这个要求时必填的,否则无法提交,这里有两个解决方法:

        1)“其他”选项一般出现在选项栏的最后一个,可以直接实现不选最后一个选项(简单粗暴,代码中采用的这种方法

);

        2)判断选择选项后,是否存在文本框的标签,有则进行填写,无则跳过。

        3.在问卷的最后,会出现一些“主观题”,不再是选择选项就可以的,这时在源码中就找不到选项的标签,取而代之的是文本框标签,这里进行一个标签的判断即可,具体见代码;

for answer in answers:
    try:
        # 先找到(滑动到看得到的位置)标签再去点击(如果有动态加载,比如前面的选择会使一些后面的选项跳过)
        driver.execute_script("arguments[0].scrollIntoView();", answer)

        # 找到一个回答,随机点击一个标签,css选择器
        ans = answer.find_elements_by_css_selector('li')
        # 如果没有获取到li标签
        if not ans:
            # 找到一个文本框
            text_area = answer.find_element_by_css_selector('textarea')
            text_area.send_keys('没有')
            continue
        # 随机选择li标签中的一个选项,有的选择有其他并且需要填写完整
        # 解决方法:1.判断li标签中是否存在input标签;2不要选择最后一项
        # 第一种解决方法
        li = random.choice(ans[:-1])
        li.click()
    except Exception as e:
        print(e)

      第三步:

        实现点击“提交”按钮,提交问卷即可;完美收工。

     

      完整代码:

from selenium import webdriver
import random

driver = webdriver.Chrome()
driver.get('https://www.wjx.cn/jq/49350955.aspx')

answers = driver.find_elements_by_css_selector('.div_question')
for answer in answers:
    try:
        driver.execute_script("arguments[0].scrollIntoView();", answer)

        ans = answer.find_elements_by_css_selector('li')
        if not ans:
            text_area = answer.find_element_by_css_selector('textarea')
            text_area.send_keys('没有')
            continue
        li = random.choice(ans[:-1])
        li.click()
    except Exception as e:
        print(e)

submit_button = driver.find_element_by_css_selector('#submit_button')
submit_button.click()
input()
发布了18 篇原创文章 · 获赞 14 · 访问量 5207

猜你喜欢

转载自blog.csdn.net/qq_36477513/article/details/103055752