python实现刷问卷星份数(面向对象)

目录

一、前言

二、模块准备

①Sojump.py需要的模块/包

②具体问卷.py需要的模块/包

三、具体代码讲解

3.1  Sojump.py

功能1 计数器counter()

功能2 伪装selenium

更新知识 selenium的更新

01 danxuan()→单选题(随机选择)

02 fixed_danxuan()→单选题(只选择某个选项)

03 excluded_danxuan()→单选题(排除一个或一些选项)

04 range_danxuan()→单选题(在m到n范围内单选)

05 restrictive_danxuan()→单选题(在某些选项中选择)

06 textinput_danxuan()→单选题(选项中允许填空)

07 duoxuan()→多选题(随机选择)

08 fixed_duoxuan()→多选题(只选择某些选项)

09 excluded_duoxuan()→多选题(排除一个或一些选项)

10 restrictive_duoxuan()→多选题(在某些选项中多选)

11 range_duoxuan()→多选题(在m到n范围内的多选)

12 textinput_duoxuan()→多选题(选项中允许填空)

13 text()→文本题

随机所在城市的选择  random_city_selection()

限制所在城市的选择  restrictive_city_selection()

提交按钮  submit()

★全部代码展示★

3.2  具体问卷.py

★全部代码展示★

具体代码讲解

四、总结


一、前言

        笔者之前也写过python实现问卷星刷份数的代码与文章(如下)

隔壁寝室刷问卷刷疯了 python实现刷问卷星份数(面向对象)https://blog.csdn.net/knighthood2001/article/details/120175929pm=1001.2014.3001.5502python自动化——问卷星刷问卷3.0版本 python实现刷问卷星份数(面向对象)https://blog.csdn.net/knighthood2001/article/details/120175929pm=1001.2014.3001.5502       

        不过之前写的属于面向过程版本,它有很大的局限性,即根据不同的问卷需要按照逻辑步骤写相应的代码,代码量非常繁琐,并且很多代码都是重复的,因此如果后续查看与更改起来也非麻烦;此外,由于距离上一次写关于问卷星的时间较长,问卷星页面元素定位可能发生了更改,需要重新获取相应的元素定位,如xpath、css selector;再加上由于selenium的升级,之前定位元素的方法被弃用,需要改变之前写的代码。

        以上三个原因,使得笔者重新对之前的代码进行增删改查,最终将之前的面向过程版本写成了面向对象版本。通过将一个个的功能封装成函数,在使用时只需要调用即可。代码量大大降低,且无需重复造车轮,对于后续检查与更改来说也比较轻松。

二、模块准备

python实现刷问卷星份数(面向对象)

        首先创建两个python文件,Sojump的翻译就是问卷星,通过在Sojump.py文件中编写主要函数,在具体问卷.py文件中通过导入Sojump,在编写该问卷的代码,最终实现刷份数。

①Sojump.py需要的模块/包

②具体问卷.py需要的模块/包

三、具体代码讲解

3.1  Sojump.py

!这里的内容是重中之重!

①元素定位分析

xpath

        上述表示的是问卷星问卷第一题的第1个选项

        上述表示的是问卷星问卷第一题的第2个选项

        经观察,可以得出问卷星问题的通用xpath,如下

css_selector 

        大致思路同上,得到问卷星选项的通用css_selector,如下

允许填空选项的css_selector 

        有些问题的选项允许填空,其通用css_selector 如下

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!注意:笔者发现问卷星有两类问卷,其对应的元素定位有所不同。

具体区分如下(笔者也是在写完该文章后突然发现,大家可以自行去试试你的问卷元素定位属于哪一类,第二种由于没有相应的问卷,可能xpath和css_selector定位会发生错误,不过这不是重点,大家只需找到并更改即可)

如果大家发现无法刷问卷,可能就是元素定位出现了问题 

②创建类并初始化

        创建一个Wenjuanxing()的类,并初始化url


接下来就开始编写函数了

功能1 计数器counter()

在类外面先定义一个count=0,然后使用下面的counter()函数,用以计数是第几次运行代码,刷了几次问卷。

功能2 伪装selenium

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

详情可以看笔者写的之前的文章

隔壁寝室刷问卷刷疯了 python实现刷问卷星份数(面向对象)https://blog.csdn.net/knighthood2001/article/details/120175929pm=1001.2014.3001.5502

更新知识 selenium的更新

        chromedriver的知识我就不细说了,主要讲的是selenium更新后,元素定位的方法发生改变。

以前:

        模块

        定位元素方法 

更新后:

        需要在导入一个模块

        定位元素方法 


01 danxuan()→单选题(随机选择)


  1. 来源:knighthood2001

    声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月22日
下一篇 2022年4月22日

相关推荐