Python+Selenium实现问卷星自动填写和选择

Python实现问卷星自动填写和选择

昨天,朋友找我填个问卷作为毕业论文数据支撑,但是无奈根本没人填写,只好他自己一份一份的填写,数据也都是怎么合适自己的论文写作怎么来,我填了一份就想吐了,只好祭出我的大Python,帮他搞定吧,谁叫我乐于助人哈哈哈!电话沟通好需求,我又给他加了些数据上下关联,开搞!

主要采用Python+Selenium来实现

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import random

'''
要求:
年龄:28-50
男
排除小学
人口3-6,在家2-4,上学
0-10
否
是
3-4
范围:比较,完全
销量:比较,完全
成本:中间3
太复杂:比较不同意,比较同意
人才:中间3
政府:中间3
'''
def run():
    driver = webdriver.Firefox()
    driver.get("https://www.wjx.cn/jq/33556010.aspx")
    time.sleep(2)
    #question1
    randomId1 = random.randint(28,45)
    driver.find_element_by_id("q1").send_keys(randomId1)

    #question2
    js = 'document.getElementById("q2_1").click()'
    driver.execute_script(js)

    #question3 大于35岁没上过大学
    if(randomId1 >= 35):
        randomId3 = "q3_" + str(random.randint(1,4))
        js = 'document.getElementById("'+randomId3+'").click()'
        driver.execute_script(js)
    #小于35岁没低于小学
    else:
        randomId3 = "q3_" + str(random.randint(2, 5))
        js = 'document.getElementById("' + randomId3 + '").click()'
        driver.execute_script(js)

    #question4
    randomId4_1 = random.randint(3,6)
    #6口人,3\4在家,3\2人上学
    if(randomId4_1 == 6):
        randomId4_2 = random.randint(3, 4)
        randomId4_3 = randomId4_1 - randomId4_2
        driver.find_element_by_id("q4_1").send_keys(randomId4_1)
        driver.find_element_by_id("q4_2").send_keys(randomId4_2)
        driver.find_element_by_id("q4_3").send_keys(randomId4_3)
    #3口人,1\2在家,1\2人上学
    elif(randomId4_1 == 3):
        randomId4_2 = random.randint(1,2)
        randomId4_3 = randomId4_1 - randomId4_2
        driver.find_element_by_id("q4_1").send_keys(randomId4_1)
        driver.find_element_by_id("q4_2").send_keys(randomId4_2)
        driver.find_element_by_id("q4_3").send_keys(randomId4_3)
    else:
        randomId4_2 = random.randint(2,4)
        randomId4_3 = randomId4_1 - randomId4_2
        driver.find_element_by_id("q4_1").send_keys(randomId4_1)
        driver.find_element_by_id("q4_2").send_keys(randomId4_2)
        driver.find_element_by_id("q4_3").send_keys(randomId4_3)

    #question5
    randomId5 = random.randint(0,10)
    driver.find_element_by_id("q5").send_keys(randomId5)

    #question6
    js = 'document.getElementById("q6_2").click()'
    driver.execute_script(js)

    #question7
    #randomId7 = "q7_" + str(random.randint(1,2))
    js = 'document.getElementById("q7_1").click()'
    driver.execute_script(js)

    #question8
    randomId8 = random.randint(3,4)
    driver.find_element_by_id("q8").send_keys(randomId8)

    #question9_0
    randomId9_0 = str(random.randint(3,4))
    js = 'document.getElementsByName("q9_0")['+randomId9_0+'].click()'
    driver.execute_script(js)

    #question9_1
    randomId9_1 = str(random.randint(3,4))
    js = 'document.getElementsByName("q9_1")['+randomId9_1+'].click()'
    driver.execute_script(js)

    #question9_2
    randomId9_2 = str(random.randint(1,3))
    js = 'document.getElementsByName("q9_2")['+randomId9_2+'].click()'
    driver.execute_script(js)

    #question9_3
    randomId9_3 = str(random.randint(3,4))
    js = 'document.getElementsByName("q9_3")['+randomId9_3+'].click()'
    driver.execute_script(js)

    #question9_4
    randomId9_4 = str(random.randint(3,4))
    js = 'document.getElementsByName("q9_4")['+randomId9_4+'].click()'
    driver.execute_script(js)

    #question10_0
    randomId10_0 = str(random.randint(3,4))
    js = 'document.getElementsByName("q10_0")['+randomId10_0+'].click()'
    driver.execute_script(js)

    #question10_1
    list_id = [1,3]
    randomId10_01 = random.randint(0,1)
    randomId10_11 = str(list_id[randomId10_01])
    js = 'document.getElementsByName("q10_1")['+randomId10_11+'].click()'
    driver.execute_script(js)

    #question10_2
    randomId10_2 = str(random.randint(3,4))
    js = 'document.getElementsByName("q10_2")['+randomId10_2+'].click()'
    driver.execute_script(js)

    #question11_0
    randomId11_0 = str(random.randint(3,4))
    js = 'document.getElementsByName("q11_0")['+randomId11_0+'].click()'
    driver.execute_script(js)

    #question11_1
    randomId11_1 = str(random.randint(1,3))
    js = 'document.getElementsByName("q11_1")['+randomId11_1+'].click()'
    driver.execute_script(js)

    #question11_2
    randomId11_2 = str(random.randint(3,4))
    js = 'document.getElementsByName("q11_2")['+randomId11_2+'].click()'
    driver.execute_script(js)

    #question12_0
    randomId12_0 = str(random.randint(3,4))
    js = 'document.getElementsByName("q12_0")['+randomId12_0+'].click()'
    driver.execute_script(js)

    #question12_1
    randomId12_1 = str(random.randint(3,4))
    js = 'document.getElementsByName("q12_1")['+randomId12_1+'].click()'
    driver.execute_script(js)

    #question12_2
    randomId12_2 = str(random.randint(3,4))
    js = 'document.getElementsByName("q12_2")['+randomId12_2+'].click()'
    driver.execute_script(js)

    #question12_3
    randomId12_3 = str(random.randint(3,4))
    js = 'document.getElementsByName("q12_3")['+randomId12_3+'].click()'
    driver.execute_script(js)

    #question13_0
    randomId13_0 = str(random.randint(3,4))
    js = 'document.getElementsByName("q13_0")['+randomId13_0+'].click()'
    driver.execute_script(js)
    #question13_1
    randomId13_1 = str(random.randint(3,4))
    js = 'document.getElementsByName("q13_1")['+randomId13_1+'].click()'
    driver.execute_script(js)
    #question13_2
    randomId13_2 = str(random.randint(3,4))
    js = 'document.getElementsByName("q13_2")['+randomId13_2+'].click()'
    driver.execute_script(js)

    #question14_0
    randomId14_0 = str(random.randint(1,3))
    js = 'document.getElementsByName("q14_0")['+randomId14_0+'].click()'
    driver.execute_script(js)

    #question14_1
    randomId14_1 = str(random.randint(1,3))
    js = 'document.getElementsByName("q14_1")['+randomId14_1+'].click()'
    driver.execute_script(js)

    #question14_2
    randomId14_2 = str(random.randint(1,3))
    js = 'document.getElementsByName("q14_2")['+randomId14_2+'].click()'
    driver.execute_script(js)

    #question14_3
    randomId14_3 = str(random.randint(1,3))
    js = 'document.getElementsByName("q14_3")['+randomId14_3+'].click()'
    driver.execute_script(js)

    #question15_0
    randomId15_0 = str(random.randint(3,4))
    js = 'document.getElementsByName("q15_0")['+randomId15_0+'].click()'
    driver.execute_script(js)

    #question15_1
    randomId15_1 = str(random.randint(3,4))
    js = 'document.getElementsByName("q15_1")['+randomId15_1+'].click()'
    driver.execute_script(js)

    #question15_2
    randomId15_2 = str(random.randint(3,4))
    js = 'document.getElementsByName("q15_2")['+randomId15_2+'].click()'
    driver.execute_script(js)

    time.sleep(2)
    #time.sleep(random.randint(90,150))
    #driver.find_element_by_id("submit_button").click()
   # time.sleep(3)
    #driver.quit()

if __name__ == '__main__':
    for i in range(1,2):
        run()
        print(i)

有两个难点:

1、网页元素设置为了隐藏,selenium获取不到,这时候采用的是JS语句执行来帮助我们

2、确定目标,'document.getElementsByName("q9_1")['+randomId9_1+'].click()',getElementsByName得到的是一个列表,通过列表来定位,此次适用于多个单选框题型

最后,帮助他完成了150份问卷,关于IP封禁和验证码问题我没有处理,可能比较懒吧,之前处理过类似问题,一种是采用代理池的方式,还可以调用百度之类的识别库对验证码进行识别,识别的话可以把图片保存到本地,然后识别返回结果,我github上有项目代码(https://github.com/YanStar)感兴趣可以翻阅一下,有什么问题,欢迎大家前来交流!

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值