Python+selenium自动化填写问卷

Python+selenium自动化填写问卷


最近肺炎疫情严重,昨天晚上通知今天起就待在家,哪里也不要去,切断病毒传播途径,避免交叉感染。在家太无聊了,想起妹妹要填写问卷调查(期末作业,相信不少人都经历过),就想着闲着也是闲着,就帮她填一下问卷吧,当然不可能是我一个一个的点喽~
不多说了,直接上代码,每一行注释都写好了,对应问卷内容文章后面也会给出,至于HTML文件就不给了,太长了,对应的定位class或者id还是容器之类的就自己根据实际情况写吧!
声明:代码不可能拿过去就能跑通,毕竟每个问卷都不一样,自己根据问卷情况自己适当修改就好了!
一定要延时!一定要延时!一定要延时!

from selenium import webdriver
import random
import time

for r in range(0,50): #循环填写50次
    print(r)  #打印次数
    wd = webdriver.Chrome();  #启动Chrome
    wd.get("https://www.wjx.cn/m/54230231.aspx")  #获取问卷连接
    wj = wd.find_element_by_class_name("fieldset")  #定位问卷主体

    # 第一题
    wj1 = wj.find_element_by_xpath("./div[1]")  #定位第一题
    wj1 = wj1.find_element_by_class_name("ui-controlgroup")  #定位选项
    wj1.find_element_by_xpath("./div["+str(random.randint(1,2))+"]").click()  #随机选择选项
    # 第二题
    wj2 = wj.find_element_by_xpath("./div[2]")  #定位第二题
    wj2 = wj2.find_element_by_class_name("ui-controlgroup")  #定位选项
    wj2.find_element_by_xpath("./div["+str(random.randint(1,6))+"]").click()  #随机选择选项
    # 第三题
    wj3 = wj.find_element_by_xpath("./div[3]")  #定位第三题
    wj3 = wj3.find_element_by_class_name("ui-controlgroup")  #定位选项
    wj3.find_element_by_xpath("./div["+str(random.randint(1,5))+"]").click()  #随机选择选项
    # 第四题
    wj4 = wj.find_element_by_xpath("./div[4]")  #定位第四题
    wj4 = wj4.find_element_by_class_name("ui-controlgroup")  #定位选项
    wj4.find_element_by_xpath("./div["+str(random.randint(1,4))+"]").click()  #随机选项选项
    # 第五题
    wj5 = wj.find_element_by_xpath("./div[5]")  #定位第五题
    wj5 = wj5.find_element_by_class_name("ui-controlgroup")  #定位选项
    num5 = random.randint(2,5)  #根据选项定义多选个数
    tp5 = []  #使用数组存放选择那些选项
    for i in range(1,num5): #生成指定个数的选项
        n5 = random.randint(1,5)  #生成随机数
        if n5 not in tp5:  #判断新生成的数是否已经存在数组内,防止同一个选项点击多次导致出现一个都没选的情况
            tp5.append(n5)  #新生成的数不在数组内,将该数加入数组
    for j in tp5:  #遍历数组
        wj5.find_element_by_xpath("./div["+str(j)+"]").click()  #选择选项

    # 由于除了第十一题以外都是多选或者单选题,因此单选多选的操作方式基本一样,只是一些参数的问题,就不一一写注释了

    # 第六题
    wj6 = wj.find_element_by_xpath("./div[6]")
    wj6 = wj6.find_element_by_class_name("ui-controlgroup")
    wj6.find_element_by_xpath("./div["+str(random.randint(1,5))+"]").click()
    # 第七题
    wj7 = wj.find_element_by_xpath("./div[7]")
    wj7 = wj7.find_element_by_class_name("ui-controlgroup")
    num7 = random.randint(2,3)
    tp7 = []
    for i in range(1,num7):
        n7 = random.randint(1,6)
        if n7 not in tp7:
            tp7.append(n7)
    for j in tp7:
        wj7.find_element_by_xpath("./div["+str(j)+"]").click()

    # 第八题
    wj8 = wj.find_element_by_xpath("./div[8]")
    wj8 = wj8.find_element_by_class_name("ui-controlgroup")
    wj8.find_element_by_xpath("./div["+str(random.randint(1,3))+"]").click()
    # 第九题
    wj9 = wj.find_element_by_xpath("./div[9]")
    wj9 = wj9.find_element_by_class_name("ui-controlgroup")
    wj9.find_element_by_xpath("./div["+str(random.randint(1,2))+"]").click()
    # 第十题
    wj10 = wj.find_element_by_xpath("./div[10]")
    wj10 = wj10.find_element_by_class_name("ui-controlgroup")
    num10 = random.randint(2,3)
    tp10 = []
    for i in range(1,num10):
        n10 = random.randint(1,3)
        if n10 not in tp10:
            tp10.append(n10)
    for j in tp10:
        wj10.find_element_by_xpath("./div["+str(j)+"]").click()
    # 第十一题
    wj11 = wj.find_element_by_xpath("./div[11]")  #定位第十一题
    wj11 = wj11.find_element_by_class_name("beginner_problem")  #定位文本框
    #自动生成相关语句
    #人工智能,有多少人工就有多少智能。在这里我就写了一些短句来进行拼接。
    # 拼接顺序为w1-w2-w3-w4-[w31/w32/w33/w34/w35/w36]-w5-w6-w7
    # 如w1-w2-w3-w4-w31-w5-w6-w7
    # w31对应w3中的第一个元素,w32对应w3中第二个元素,以此类推。
    #
    w1 = ["我觉得","我认为","在我看来","依我看","As far as I know, "," "]
    w2 = "最重要的是"
    w3 = ["添加剂。","原料。","加工程序。","包装材料。","运输方式。","杀菌消毒。"]
    w4 = ["未来更应该注意","在未来,我们更应该注意","我们应该注意","应该注意"]
    w31 = ["食品添加剂的使用,","添加剂的使用,","严格控制添加剂的使用,","添加剂对人类的危害,"]
    w32 = ["原材料的采购,","原料的使用,","果汁原料的采购途径和卫生,","果汁原材料的运输、加工、采购环节的卫生情况,"]
    w33 = ["加工程序的规范,","加工程序的合理性和健康,","原料加工车间的卫生情况和加工程序的合规性,","是否严格执行预定的加工程序,"]
    w34 = ["包装材料的环保和健康,","使用的包装材料是否合乎相关标准,","包装材料的来源是否健康,","包装过程及材料是否符合相关标准,"]
    w35 = ["运输方式的合理性,","运输方式的严格控制,","在果汁原料和成品的运输过程中是否有严密的监管,","果汁运输过程中的环境是否符合果汁存放规定,"]
    w36 = ["在果汁生产中所有环节的杀菌消毒流程,","果汁生产加工过程中的消毒杀菌,","果汁生产车间是否严格按照相关食品消毒规定执行,","果汁原料加工是否存在健康隐患,"]
    w5 = ["我认为","我觉得"]
    w6 = ["只有企业做到这些,","企业如果能够做到这些,","如果企业严格按照相关标准,"]
    w7 = ["那公众食品健康卫生将越来越好!","那么我国未来的食品卫生将发展到一个新的高度!","我相信我国食品卫生状况将是充满希望和光明的!"]
    num_w3 = random.randint(0,5)  #生产随机数随机选择w3中的元素
    words1 = w1[random.randint(0,5)]+w2+w3[num_w3]+w4[random.randint(0,3)]  #随机选取元素拼接w1-w2-w3-w4
    words2 = ""
    # 根据选择的w3中的元素拼接[w31/w32/w33/w34/w35/w36]-w5-w6-w7
    if num_w3 == 0:
        words2 = words1+w31[random.randint(0,3)]+w5[random.randint(0,1)]+w6[random.randint(0,2)]+w7[random.randint(0,2)]
    elif num_w3 == 1:
        words2 = words1 + w32[random.randint(0, 3)] + w5[random.randint(0, 1)] + w6[random.randint(0, 2)] + w7[random.randint(0, 2)]
    elif num_w3 == 2:
        words2 = words1 + w33[random.randint(0, 3)] + w5[random.randint(0, 1)] + w6[random.randint(0, 2)] + w7[random.randint(0, 2)]
    elif num_w3 == 3:
        words2 = words1 + w34[random.randint(0, 3)] + w5[random.randint(0, 1)] + w6[random.randint(0, 2)] + w7[random.randint(0, 2)]
    elif num_w3 == 4:
        words2 = words1 + w35[random.randint(0, 3)] + w5[random.randint(0, 1)] + w6[random.randint(0, 2)] + w7[random.randint(0, 2)]
    elif num_w3 == 5:
        words2 = words1 + w36[random.randint(0, 3)] + w5[random.randint(0, 1)] + w6[random.randint(0, 2)] + w7[random.randint(0, 2)]
    wj11.find_element_by_xpath("./textarea").send_keys(words2)  #将生产的Word2写入文本框内
    # 提交
    time.sleep(10)  #等待10s,防检测
    button = wd.find_element_by_class_name("voteDiv").click() #定位提交按钮并点击提交
    time.sleep(3)   #等待3秒
    wd.quit()   #关闭浏览器
    time.sleep(random.randint(5,13))  #休眠随机时间长度开始下一次填写

我再啰嗦几句,延时是为了避免出现验证码,如果不延时或者延时非常短的话就会出现验证码,也算是一种防刷机制吧!一开始我一共我只延时了5秒,刷了几个就让我输入验证码了,然后我就输了几次就好了,为了避免这种情况,强烈建议间隔时间不要太短,代码中的延时亲测可用,不会出现验证码

下面就是问卷内容了
Python+selenium自动化填写问卷_第1张图片

图中出现的验证码框就是一开始延时太短所致!后面修改了的延时时间是不会出现验证码的,亲测可用!
注:我这里使用的是chrome浏览器,如果有些朋友不知道没有安装好相应的环境的先把环境做好!没有安装Chromedriver把Chromedriver安装好了再操作!
Chromedriver与Chrome的版本要对应!
Chromedriver与Chrome的版本要对应!
Chromedriver与Chrome的版本要对应!
重要是事情说三遍!
其余好像没什么要唠叨的了,如果有问题可以私信我或者给我留言。

你可能感兴趣的:(Python,selenium)