python3模拟提交问卷星/问卷网表单(selenium+chromedriver/phantomjs)

简介: 前一段时间有个课程需要问卷星搜集材料信息,,但是问卷星这东西你不一个个求人哪有人愿意点进去帮你填呢,,呵呵,不行,我自己来。。。

更新:第一个问卷星是我同学的,,我们组的是问卷网。。顺便附上我的完整思路(在问卷星下侧是问卷网)


  • 前一段时间有个课程需要问卷星搜集材料信息,,但是问卷星这东西你不一个个求人哪有人愿意点进去帮你填呢,,呵呵,不行,我自己来。。。
  • 本来想看看问卷星他的表单提交的请求方式,,奈何我太垃圾。看不懂那么庞大的js,理不清其中的思路,,既然能力不行,那只好用selenium这个自动化工具了。


先用简单的一个表单做说明吧。找一个简单的问卷


20181128183759684.png

  • 观察dom树结构发现这个rel属性可以确定唯一。那么可以直接用css选择器语法 a[rel=‘q1_2’]python字符串可以用单引号表示,外面套双引号时候不用考虑转义字符串,比较方便。
  • 既然找个这个位置,就可以用程序先模拟点击了,查看中不中。贴上程序代码:


from selenium import webdriver
import time
browser = webdriver.Chrome()#声明
browser.get('https://www.wjx.cn/jq/31521246.aspx')
time.sleep(2)
for i in range(10):
 browser.get('https://www.wjx.cn/jq/31521246.aspx')
 browser.find_element_by_css_selector("a[rel='q1_3']").click()
 time.sleep(1)
 browser.find_element_by_css_selector("a[rel='q2_1']").click()
 time.sleep(1)
 browser.find_element_by_css_selector("a[rel='q3_2']").click()
 time.sleep(1)
 browser.find_element_by_id("submit_button").click()


有需要注意的是一定要注意时间间隔,稍微一块就验证码伺候。


20181128184548812.png


  • 之所以用chromediver是因为有界面的可以知道对错,当程序无误的时候可以换成phantomjs。另外,你可以根据已经有的回答情况,和实际情况,按照一定概率进行点击不同的选项,那么就可以更逼真的实现数据的(伪造)??
  • 这篇纯粹娱乐,如大佬能直接破解js请赐教。
  • 如果没有selenium或者没有无头浏览器/chromedriver环境可以百度进行先安装。
    问卷网:


20181128202223780.png



分析结构之后发现和问卷星的不一样,并且还有多选框,多选框不能为空,我该如何处理呢?


首先,我将我的问卷给我的好哥们姐们认真的填了一下,采集了14份左右的真实样本。


2018112820244350.png20181128202553111.png


  • 这样我就可以根据这个数据模拟出很逼真的概率。
  • 说一下这里不一样的地方,这里多个元素用selenium中的find_elements查找多个元素。因为这里不好找到唯一标识,只好通过位置确定元素。


下面附上python代码,核心思想就是如果差不多就随机编号,如果差得多jiuyong随机100个数查找百分比的范围


from selenium import webdriver
import time
import random
browser = webdriver.PhantomJS()
browser.get('https://www.baidu.com')
time.sleep(2)
for i in range(200):
  try:
    time.sleep(5)
    browser.get('https://www.wenjuan.com/s/2Uf6Fbe/')
    sex=browser.find_elements_by_css_selector("a[rel='question_5bfe34cd92beb5077b5fdaec']")
    index=random.randint(1,5)
    if index<3:
        sex[1].click()
    else:
        sex[0].click()
    time.sleep(0.5)
    grade=browser.find_elements_by_css_selector("a[rel='question_5bfe34cd92beb5077b5fdaed']")
    #index=random.randint(0,3)
    grade[2].click()
    time.sleep(0.5)
    istanguo=browser.find_elements_by_css_selector("a[rel='question_5bfe34ce92beb5077b5fdaee']")
    index=random.randint(1,10)
    if index>6:
        istanguo[0].click()
    else:
        istanguo[1].click()
    tiaojian=browser.find_elements_by_css_selector("a[rel='question_5bfe34ce92beb5077b5fdaf1']")
    index=random.randint(1,13)
    if index<=6:
        tiaojian[0].click()
    index = random.randint(1, 13)
    if index<=6:
        tiaojian[1].click()
    index = random.randint(1, 13)
    if index <= 3:
        tiaojian[2].click()
    if index<=8:
        tiaojian[3].click()
    index = random.randint(1, 13)
    if index<=3:
        tiaojian[4].click()
    index = random.randint(1, 13)
    if index <= 7:
        tiaojian[5].click()
    if index<=6:
        tiaojian[6].click()
    index = random.randint(1, 13)
    if index<=9:
        tiaojian[7].click()
    index = random.randint(1, 13)
    if index <= 9:
        tiaojian[8].click()
    if index<=2:
        tiaojian[9].click()
    index = random.randint(1, 13)
    if index<=2:
        tiaojian[10].click()
    index = random.randint(1, 16)
    if index <= 2:
        tiaojian[11].click()
    index = random.randint(1, 13)
    if index <= 8:
        tiaojian[12].click()
    age= browser.find_elements_by_css_selector("a[rel='question_5bfe34ce92beb5077b5fdaf4']")
    index=random.randint(0,100)
    if index<50:
        age[0].click()
    elif index>65:
        age[2].click()
    else:
        age[1].click()
    time.sleep(0.5)
    yingxiang=browser.find_elements_by_css_selector("a[rel='question_5bfe34ce92beb5077b5fdafb']")
    index=random.randint(1,10)
    jud=False
    if(index<=4):
        yingxiang[0].click()
        jud=True
    index = random.randint(1, 10)
    if (index <= 2):
        yingxiang[1].click()
        jud = True
    index = random.randint(1, 10)
    if (index <= 6):
        jud = True
        yingxiang[2].click()
    index = random.randint(1, 10)
    if (index <= 8):
        yingxiang[3].click()
        jud = True
    index = random.randint(1, 10)
    if (index <= 5):
        yingxiang[4].click()
        jud = True
    if jud==False:#防止运气不好一个没选上
        yingxiang[2].click()
    time.sleep(0.3)
    jichu=browser.find_elements_by_css_selector("a[rel='question_5bfe34ce92beb5077b5fdafd']")
    index=random.randint(0,100)
    if index<64:
        jichu[1].click()
    elif index>98:
        jichu[2].click()
    else:
        jichu[0].click()
    time.sleep(0.5)
    jiehun=browser.find_elements_by_css_selector("a[rel='question_5bfe395992beb5238625321e']")
    index=random.randint(0,100)
    if index<65:
        jiehun[2].click()
    elif index>98:
        jiehun[0].click()
    elif index>=65 and index<=83:
        jiehun[3].click()
    else:
        jiehun[1].click()
    browser.find_element_by_id("next_button").click()
  except Exception as e:
      print(e)
#input.clear()
#button = browser.find_element_by_class_name('btn-search')
#button.click()


查看无误之后不想弹出窗口将chromedriver换成phantomjs或设置不跳出参数即可即可。


20181128203747827.png


可以看到答题人数上涨了(切记控制速度)


目录
相关文章
|
1月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
101 5
|
19天前
|
数据采集 Web App开发 前端开发
Python爬虫进阶:Selenium在动态网页抓取中的实战
【10月更文挑战第26天】动态网页抓取是网络爬虫的难点,因为数据通常通过JavaScript异步加载。Selenium通过模拟浏览器行为,可以加载和执行JavaScript,从而获取动态网页的完整内容。本文通过实战案例,介绍如何使用Selenium在Python中抓取动态网页。首先安装Selenium库和浏览器驱动,然后通过示例代码展示如何抓取英国国家美术馆的图片信息。
39 6
|
1月前
|
数据采集 Web App开发 数据可视化
Python爬虫教程:Selenium可视化爬虫的快速入门
Python爬虫教程:Selenium可视化爬虫的快速入门
|
1月前
|
Python
Python编程案例:同一工作簿不同表单特定数据添加到工作簿的另一表单里
Python编程案例:同一工作簿不同表单特定数据添加到工作簿的另一表单里
|
1月前
|
测试技术 数据安全/隐私保护 开发者
自动化测试的奥秘:如何用Selenium和Python提升软件质量
【9月更文挑战第35天】在软件开发的海洋中,自动化测试是那艘能引领我们穿越波涛的帆船。本文将揭开自动化测试的神秘面纱,以Selenium和Python为工具,展示如何构建一个简单而强大的自动化测试框架。我们将从基础出发,逐步深入到高级应用,让读者能够理解并实现自动化测试脚本,从而提升软件的质量与可靠性。
|
2月前
|
Web App开发 测试技术 持续交付
自动化测试的利器:Selenium与Python的完美结合
【9月更文挑战第21天】在软件开发的世界里,测试是确保产品质量的关键步骤。随着敏捷开发和持续集成的流行,自动化测试工具变得尤为重要。本文将介绍如何使用Selenium和Python进行高效的自动化测试,不仅提供代码示例,还深入探讨如何设计测试用例、选择正确的测试框架、以及如何整合到CI/CD流程中。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。
46 3
|
2月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:如何用Selenium和Python打造高效测试脚本
【9月更文挑战第13天】在软件开发的海洋中,自动化测试是那抹不可或缺的亮色。它不仅提升了测试效率,还保障了产品质量。本文将带你领略使用Selenium和Python构建自动化测试脚本的魅力所在,从环境的搭建到脚本的编写,再到问题的排查,每一步都是对软件质量把控的深刻理解和实践。让我们开始这段探索之旅,解锁自动化测试的秘密吧!
68 0
|
3月前
|
Web App开发 测试技术 持续交付
探索自动化测试:以Selenium和Python为例
【8月更文挑战第31天】自动化测试在现代软件开发中扮演着不可或缺的角色。本文将通过一个简化的示例,展示如何使用Selenium和Python进行Web应用的自动化测试。我们将从安装必要的工具开始,逐步构建一个简单的测试脚本,并执行它来验证其功能。通过这个过程,我们旨在揭示自动化测试的价值,并激励读者深入探索这一领域。
|
3月前
|
Web App开发 安全 测试技术
自动化测试中的Python魔法:使用Selenium和pytest框架
【8月更文挑战第31天】 在软件开发的海洋中,自动化测试是确保航行安全的灯塔。本文将带你探索如何利用Python语言结合Selenium和pytest框架,搭建一套高效的自动化测试体系。我们将从基础设置讲起,逐步深入到编写测试用例,最后通过一个实战案例来展示如何在实际项目中运用这些工具。文章旨在为读者提供一套清晰的自动化测试解决方案,让你的开发之旅更加顺畅。
|
3月前
|
Web App开发 测试技术 API
探索自动化测试的奥秘:以Selenium和Python为例
【8月更文挑战第31天】在软件开发的海洋中,自动化测试是一艘能够带领我们驶向高效、准确代码实现的航船。本文将揭开自动化测试的神秘面纱,通过Selenium和Python这两个工具的结合使用,展示如何构建一个简单而强大的自动化测试脚本。从环境配置到脚本编写,再到实际运行,我们将一步步深入自动化测试的世界,解锁软件质量保障的新技能。