问卷星我想大家在大学或者工作中多多少少会遇到一些,有的工作经常要填,这个我也是挺咱们的学姐经常抱怨,说是匿名的调查问卷,结果填起来一般要挺久才能搞完,如果多的话还是挺烦的,还有就是大学我们这边会经常遇到,比如加入某个社团,需要填写各种信息,然后各种选项,学校领导有时也会发一些这样的问卷来让我们匿名填写,问卷调查是一种发掘事实现况的研究方式,最大的目的是搜集,累积某一目标族群的各项科学教育属性的基本资料,可分为描述性研究及分析性研究两大类。在决定是否采用问卷法作为研究工具,应考量是否能顺利达成研究目标以及注意研究样本在问卷上的配合度。 对于当代大学生来说,马原思修行策这些课的实践活动离不开问卷调查,可是各种转发过后却只有寥寥数人填写的痛谁又懂呢?
废话不多说咱们来演示一下,毕竟有需求就会有市场!会运用自己所会的东西来变现这就是靠技术吃饭了,每个月多点零花钱它不香吗?
今天要用到Python的selenium工具,用它模拟点击填写问卷很简单,可现在大部分公司或者学校都有反爬技术,当你模拟点击提交按钮后会弹出来一个智能验证,这个时候后台判断你是Python控制浏览器进行操作的,无论你手动点击还是自动点击都会提示验证失败。
检测基本原理是检测当前浏览器窗口下的window.navigator对象是否包含webdriver这个属性 ,正常情况下这个值是undefined,当我们使用了selenium,这个属性就会被赋值,网站通过js判断这个属性不正常,直接pass了我们的操作。
用第三方库pyppeteer可以解决一部分反爬技术 ,本文不用这种方法,大家可以自行百度 我们可以通过在页面进入之前执行js代码,将webdriver属性置空,从而躲过网站的检测
option = webdriver.ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=option)
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})
driver.get("https://www.wjx.cn/m/47846766.aspx")
复制代码
接下来就是随机填写选择题和填空题,selenium的八种定位方法 很简单,可以根据自己的喜好选择,通过random随机选择答案,填空题可以从我们事先设定好的列表中获取
for i in range(1,11):
n=random.randint(1,3)
n1=random.randint(1,2)
time.sleep(0.3)
try:
element=driver.find_element_by_css_selector("#div{} > div.ui-controlgroup > div:nth-child({})".format(i,n))
element.click()
except:
try:
element = driver.find_element_by_css_selector("#div{} > div.ui-controlgroup > div:nth-child({})".format(i, n1))
element.click()
except:
pass
input = driver.find_element_by_id("q11")
input.send_keys(word)
复制代码
提交过于频繁的话还是会触发验证,不过这时候系统已经把我们当成了一个真人,只需要一次点击智能验证的按钮即可通过验证,完成问卷
time.sleep(1)
try:
element = driver.find_element_by_css_selector("#alert_box > div:nth-child(2) > div:nth-child(2) > button")
element.click()
time.sleep(0.5)
yanz = driver.find_element_by_id("rectMask")
yanz.click()
time.sleep(4)
except:
pass
driver.close()
复制代码
可以看到问卷的随机效果还是很不错的
接下来就是上代码的时候了!
import time
from selenium import webdriver
import random
j=1
word='填空题'
while(j<51):
# chrome_options = webdriver.ChromeOptions()
# chrome_options.add_argument('--headless')
# driver = webdriver.Chrome(options=chrome_options)
# driver = webdriver.Chrome()
option = webdriver.ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=option)
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})
driver.get("https://www.wjx.cn/m/47846766.aspx")
time.sleep(2)
for i in range(1,11):
n=random.randint(1,3)
n1=random.randint(1,2)
time.sleep(0.3)
try:
element=driver.find_element_by_css_selector("#div{} > div.ui-controlgroup > div:nth-child({})".format(i,n))
element.click()
except:
try:
element = driver.find_element_by_css_selector("#div{} > div.ui-controlgroup > div:nth-child({})".format(i, n1))
element.click()
except:
pass
input = driver.find_element_by_id("q11")
input.send_keys(word)
time.sleep(0.5)
tijiao=driver.find_element_by_id("ctlNext")
tijiao.click()
time.sleep(1)
try:
element = driver.find_element_by_css_selector("#alert_box > div:nth-child(2) > div:nth-child(2) > button")
element.click()
time.sleep(0.5)
yanz = driver.find_element_by_id("rectMask")
yanz.click()
time.sleep(4)
except:
pass
driver.close()
print("已经提交{}次".format(j))
j=j+1
!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有