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开发 数据挖掘
利用Python和Selenium实现定时任务爬虫
利用Python和Selenium实现定时任务爬虫
|
23小时前
|
移动开发 JavaScript 前端开发
Python表单处理
Python表单处理
8 1
|
1天前
|
前端开发 Java 测试技术
selenium+python自动化测试--登录
selenium+python自动化测试--登录
7 2
|
1天前
|
Web App开发 人工智能 Java
Python Selenium实现自动化测试及Chrome驱动使用
Python Selenium实现自动化测试及Chrome驱动使用
17 2
|
1天前
|
前端开发 测试技术 C++
Python自动化测试面试:unittest、pytest与Selenium详解
【4月更文挑战第19天】本文聚焦Python自动化测试面试,重点讨论unittest、pytest和Selenium三大框架。unittest涉及断言、TestSuite和覆盖率报告;易错点包括测试代码冗余和异常处理。pytest涵盖fixtures、参数化测试和插件系统,要注意避免过度依赖unittest特性。Selenium的核心是WebDriver操作、等待策略和测试报告生成,强调智能等待和元素定位策略。掌握这些关键点将有助于提升面试表现。
29 0
|
1天前
|
Web App开发 测试技术 网络安全
|
1天前
|
数据采集 Web App开发 JavaScript
Python 网络爬虫技巧分享:优化 Selenium 滚动加载网易新闻策略
Python 网络爬虫技巧分享:优化 Selenium 滚动加载网易新闻策略
|
1天前
|
Web App开发 前端开发 JavaScript
Python Selenium是一个强大的自动化测试工具
Python Selenium是一个强大的自动化测试工具
|
1天前
|
存储 数据库 数据安全/隐私保护
Python中表单的处理
Python中表单的处理
21 0
|
1天前
|
Web App开发 测试技术 Python
使用 Python 结合 Selenium 访问一个 url
使用 Python 结合 Selenium 访问一个 url
29 0

热门文章

最新文章