通过selenium完成问卷调查
案例目的:
介绍对问题和问题选项所在的节点进行xpath定位,以及实现鼠标点击操作。
案例实现的功能:
快速自动完成问卷调查
首先分享一个问卷调查的网址:
https://www.wjx.cn/jq/37766520.aspx
下面开始案例的分析:
打开网址我们发现一共有21个问题,第一个问题时比较特殊,因为只包含一两个选项。因此,我们在可以先完成前三个问题,然后剩下的问题统一处理。那么我们的程序里会出现if判断语序。
其次就是重点,怎样对问题的选项进行定位和点击呢?
大家会发现,我们的右键检查没法用了,因为没法点击右键。
解决办法:
按F12键进入检查,点击左上角带箭头的小方框,然后再点击问题的选项,就会进入到其所在的位置。如下图:
注意:我们定位的是代表每个选项的标签,而不是选项的文本。
例如,我们定位到选项“男”,对应的并不是下面的label文本男,而是男这个选项对应的标签a。而且通过定位选项女所在的位置,我们发现了一个规律:
也就是图上标注的第一个问题的第一个选项的rel属性为q1_1,第一个问题的第二个选项则为q1_2。因此,我们可以判定“q第m个问题_问题的第n个选项”。基于这个规律,我们就可以定位到每个问题和选项对应的标签位置。
找到了问题标签的规律,还差一个就是提交选项
对于提交选项对应的节点位置,我们可以通过id="submit_button"进行定位。
所有标签位置已经定位完毕,剩下就是点击了。
如何点击就简单了,就是一个click()就能搞定了的。
分析完毕,上代码:
from selenium.webdriver import Chrome
import random
if __name__ == '__main__':
# 创建浏览器对象
chrome = Chrome()
# 在网址栏输入url,进入页面
chrome.get('https://www.wjx.cn/jq/37766520.aspx')
# 最大化页面
chrome.maximize_window()
# 队第一个问题进行特殊处理
click_obj = chrome.find_element_by_xpath(f'//a[@rel="q1_{random.randint(1,2)}"]')
click_obj.click()
# 选择剩下的几个规律相同的选项
for i in range(2,22):
click_obj = chrome.find_element_by_xpath(f'//a[@rel="q{i}_{random.randint(1,4)}"]')
click_obj.click()
# 最后的提交,可以通过id进行识别
submit_obj = chrome.find_element_by_id('submit_button')
# 点击提交
submit_obj.click()
执行结果如下:
最后出现了个小插曲,这个案例是我上一年讲的,但是今年却出现了只能验证。应该是对selenium进行的一个反爬手段,我试着解决怎样处理这个验证。此次案例主要是对整个过程的了解,谢谢大家的阅读。