前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这个脚本让我在学习每月赚一千,Python自动化随机填写问卷

这个脚本让我在学习每月赚一千,Python自动化随机填写问卷

原创
作者头像
conanma
修改2021-08-31 11:17:30
1K0
修改2021-08-31 11:17:30
举报
文章被收录于专栏:正则

导读

     问卷星我想大家在大学或者工作中多多少少会遇到一些,有的工作经常要填,这个我也是挺咱们的学姐经常抱怨,说是匿名的调查问卷,结果填起来一般要挺久才能搞完,如果多的话还是挺烦的,还有就是大学我们这边会经常遇到,比如加入某个社团,需要填写各种信息,然后各种选项,学校领导有时也会发一些这样的问卷来让我们匿名填写,问卷调查是一种发掘事实现况的研究方式,最大的目的是搜集,累积某一目标族群的各项科学教育属性的基本资料,可分为描述性研究及分析性研究两大类。在决定是否采用问卷法作为研究工具,应考量是否能顺利达成研究目标以及注意研究样本在问卷上的配合度。 对于当代大学生来说,马原思修行策这些课的实践活动离不开问卷调查,可是各种转发过后却只有寥寥数人填写的痛谁又懂呢? 

       废话不多说咱们来演示一下,毕竟有需求就会有市场!会运用自己所会的东西来变现这就是靠技术吃饭了,每个月多点零花钱它不香吗?

开始

     今天要用到Python的selenium工具,用它模拟点击填写问卷很简单,可现在大部分公司或者学校都有反爬技术,当你模拟点击提交按钮后会弹出来一个智能验证,这个时候后台判断你是Python控制浏览器进行操作的,无论你手动点击还是自动点击都会提示验证失败。

检测基本原理是检测当前浏览器窗口下的window.navigator对象是否包含webdriver这个属性 ,正常情况下这个值是undefined,当我们使用了selenium,这个属性就会被赋值,网站通过js判断这个属性不正常,直接pass了我们的操作。 

 用第三方库pyppeteer可以解决一部分反爬技术 ,本文不用这种方法,大家可以自行百度 我们可以通过在页面进入之前执行js代码,将webdriver属性置空,从而躲过网站的检测 

代码语言:javascript
复制
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随机选择答案,填空题可以从我们事先设定好的列表中获取

代码语言:javascript
复制
    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)
复制代码

 提交过于频繁的话还是会触发验证,不过这时候系统已经把我们当成了一个真人,只需要一次点击智能验证的按钮即可通过验证,完成问卷

代码语言:javascript
复制
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()
复制代码

可以看到问卷的随机效果还是很不错的 

接下来就是上代码的时候了!

代码语言:javascript
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 开始
相关产品与服务
腾讯问卷
腾讯问卷是专业的在线问卷调查平台,支撑了腾讯核心业务的⽤户、市场、产品研究工作。平台提供基于数据收集的专业调查研究解决方案,覆盖问卷调查、信息上报、在线测评、在线考试、360度评估、投票打卡等工作场景,致力于为客户提供高效的洞察决策工具。同时平台还拥有超百万级的真实样本用户,可以提供高效、精准的问卷有偿投放服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档