IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 隔壁寝室刷问卷刷疯了,我们寝室则相反,打游戏的同时问卷份数也在增加,隔壁寝室的人投来羡慕的目光,向我要代码!! -> 正文阅读

[Python知识库]隔壁寝室刷问卷刷疯了,我们寝室则相反,打游戏的同时问卷份数也在增加,隔壁寝室的人投来羡慕的目光,向我要代码!!

现在正值各校开学之际,本人也已开学,现在的任务就是社会实践,需要发布问卷调查。问卷份数的多少与你的人脉息息相关。对于人脉不是特别多的我来说,用python写一个程序来帮忙填问卷是个不错的选择。

一、前言

注:虽然问卷星中有多选题,但是本博文的程序只会单选,以后应该会更新多选题的代码

以下代码仅供参考哦,应具体问卷具体分析

?这是问卷星的部分问题

二、正文

1.模块

import random
from selenium import webdriver
import time
import schedule as schedule

①该程序通过selenium模拟人的点击操作,类似与别人帮你操作电脑。只不过这里的别人是python代码

②该程序通过random函数,做到随机选择某个选项

③schedule函数表示定时执行该程序,本文是每隔5秒运行程序(程序运行完后过5秒再开始重新运行)

2.注意事项

?

?

?

通过selenium运行问卷星的网址时,会出现智能验证,虽然只要点击就能进行智能检验,但是尝试后发现只要通过selenium运行,无论是手动还是自动,都会报错,尝试多次仍报错。起初我以为是运行时间没有间隔,导致问卷星把它当作爬虫处理,后来我加大时间间隔,发现仍然不行。

查阅相关资料以及别人的博客,我发现是因为问卷星的网页有反爬机制,它会检查你是不是通过selenium访问网页的。大多数情况下,检测基本原理是检测当前浏览器窗口下的window.navigator对象是否包含webdriver这个属性。因为在正常使用浏览器的情况下,这个属性是undefined,然而一旦我们使用了selenium,selenium会给window.navigator设置webdriver属性。很多网站就通过JS判断如果webdrive?属性存在,那就直接屏蔽。以下代码可以在每次页面加载之前就不会给window.navigator设置webdriver属性,从而能够通过智能检测。

    url = 'https://www.wjx.cn/vm/YD3Xwc3.aspx'
    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(url)

3.代码讲解

import random
from selenium import webdriver
import time
import schedule as schedule
def run():
    url = 'https://www.wjx.cn/vm/YD3Xwc3.aspx'
    # 躲避智能检测
    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(url)
    # 总共有13个题目
    i = 1
    while i <= 13:
        base_xpath1 = '//*[@id="div{}"]'.format(i)
        base_xpath3 = base_xpath1 + '/div[2]/div'
        a = driver.find_elements_by_xpath(base_xpath3)
        # print(len(a))
        # 在选项个数范围内,随机生成一个数字 如有四个选项,随机生成数字3
        b = random.randint(1, len(a))
        # print(b)
        # 通过随机数字,点击该数字的选项
        driver.find_element_by_css_selector('#div{} > div.ui-controlgroup > div:nth-child({})'.format(i, b)).click()
        time.sleep(1)
        # 当第六个问题回答第四个选项(其他)时,需要填写
        if i == 6 and b == 4:
            time.sleep(1)
            # 这里你可以每隔一段时间更改send_keys中的内容,也可以将答案写出来,然后随机选择哪个选项
            driver.find_element_by_css_selector('#tqq6_4').send_keys('QQ群和微信群')

        # 当第三个问题答案是是时,跳到5
        if i == 3 and b == 1:
            i = 5
        else:
            i += 1
    # 点击提交按钮
    time.sleep(0.5)
    driver.find_element_by_xpath('//*[@id="ctlNext"]').click()
    # 出现点击验证码验证
    time.sleep(1)
    driver.find_element_by_xpath('//*[@id="alert_box"]/div[2]/div[2]/button').click()
    time.sleep(0.5)
    driver.find_element_by_xpath('//*[@id="rectMask"]').click()
    time.sleep(4)
    # 关闭页面
    handles = driver.window_handles
    driver.switch_to.window(handles[0])
    time.sleep(1)
    # 刷新页面(可能不需要)
    driver.refresh()
    # 关闭当前页面,如果只有一个页面,则也关闭浏览器
    driver.close()
schedule.every(5).seconds.do(run)

while True:
    schedule.run_pending()

①以上代码定位元素最好copy selector,因为之前在浏览器copy xpath的时候有时候会报错。

②当第三题的答案为否时,才弹出第四题,当第三题的答案为是时,跳过第四题。

③两个if函数不能调换,否则i += 1运行时会找不到第六题其他选项的文本输入而报错。

④len(a)表示选项的个数,b表示随机选择一个数字(不会超出选项的个数)

import schedule as schedule
def run():
    pass


schedule.every(5).seconds.do(run)

while True:
    schedule.run_pending()

以上代码表示每隔5秒运行一次程序的模板,以后可以套用,隔的时间可以自己更改

4.运行视频

三、结论

运行该程序后,刷60份问卷左右,程序将会出现滑块验证码,大家感兴趣的可以试着去破解一下,该滑动验证码为从左滑到最右边。大家也可以用你室友的电脑运行一下这个程序。更重要的是,出现验证码后,过一个小时以后(具体时间不清楚),滑块验证码就又消失了,程序又能刷问卷了,本人由于份数刷够了,就没有接下去进行试验,大家感兴趣的可以去记录一下,看是否有规律。

?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 10:46:11  更:2021-09-05 10:46:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 13:44:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码