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秒,刷了几个就让我输入验证码了,然后我就输了几次就好了,为了避免这种情况,强烈建议间隔时间不要太短,代码中的延时亲测可用,不会出现验证码
图中出现的验证码框就是一开始延时太短所致!后面修改了的延时时间是不会出现验证码的,亲测可用!
注:我这里使用的是chrome浏览器,如果有些朋友不知道没有安装好相应的环境的先把环境做好!没有安装Chromedriver把Chromedriver安装好了再操作!
Chromedriver与Chrome的版本要对应!
Chromedriver与Chrome的版本要对应!
Chromedriver与Chrome的版本要对应!
重要是事情说三遍!
其余好像没什么要唠叨的了,如果有问题可以私信我或者给我留言。