前几天笔者为了刷问卷数量尝试了用selenium模拟登录并使用ip代理进行问卷填写,在使用的过程中遇到的主要问题是网页源代码中节点的选择——selenium使用click必须要定位到节点之后才能选取。由于css选择器的方式我不是太熟悉,尝试了一下之后觉得规则有点难记和麻烦,所以最后尝试了使用xpath进行选取。以下便是介绍一下关于xpath的内容并通过一个问卷的演示详细阐述。

首先要说的是,如果你之前不熟悉xpath,然后直接用python尝试定位肯定会有很多的错误浪费时间,所以最好的方式是下载一个xpath的软件,这个软件可以通过填写xpath规则实时演示结果。软件的地址在:

https://pan.baidu.com/s/1sCXx4pPrtzEB7CV6MOclIQ

提取码为:ugbi

该软件只能用在chrome浏览器上,下载完之后解压,会得到一个文件夹

接下来打开谷歌浏览器,选择最右边的选项,里面有一个更多工具,在更多工具中有一个扩展程序选项,点开。

如下图所示,注意,你得先打开开发者模式才能进行添加。然后选择加载已解压的扩展程序,选择之前压缩后的xpath文件即可。

之后,你可以在浏览器的顶上选择即可。

打开xpath扩展程序后,会出现如下的界面,其中QUERY便是你要填写的xpath规则,RESULTS是显示的结果,这个结果显示出来的直接效果是文字,如果一个节点下没有文字,在RESULTS这里会什么都不显示,但是RESULTS后面的括号内是会有数字的(表示究竟有没有符合规则的节点)

接下来主要是介绍xpath的规则,其实非常非常简单。

一般来说,规则基本都是以双斜杠 // 开头,紧接着跟你要找的节点。这里大家可以先开启f12控制台,在Elements中查看网页源代码, xpath规则中的 // 或者 /后首先跟着的都是一个标签最开头的元素,以下面的代码为例:

在上面的代码中,div、svg、script都是第一个元素。(学过html和css的肯定很清楚,这点我就不多说了)。

那么指定了第一个元素,如何找到某个特定的元素呢?在css中相当于属性的说法,那么就需要通过这串代码——[@属性名="属性值"],以我自己创建的一个问卷为例,该问卷的地址为

xpath测试

我们以第一题为例,如果我要定位到整个标题的框架(即涵盖了标题,涵盖了答案的整个框架)改该怎么做?我们先看网页源代码,然后在控制台中找到这个框架。

观察网页源代码可以发现,每一道题的开始元素都是div,他们具有相同的class标签和属性值"field ui-field-contain",显然,直接通过[@class="field ui-field-contain"]是无法选择第一题的,(但是可以选择到所有题。),观察发现,不同题的区别在于id属性和topic属性,这里我们只需要选择其中的一个,例如我选择id属性,那么我要定位到第一题的整个框架,只需要在QUERY中输入//div[@id="div1"],观察结果如下

看来我们已经实现了定位到第一题的整个框架,那么现在,我们要选择ans1和ans2的整个框架,又该怎么做?同样通过f12观察源代码

我们可以发现,这个框架其实是整个第一题框架下的第二个子标签,第一个子标签是class属性值为"field-label"的,这个标签的结果实际上就是标题的名字。所以,要实现定位到第二个div子标签有什么办法?

首先还要补充下,关于Xpath的规则,默认都是//开头,以前面的代码为例,//div[@id="div1"]会定位到符合id属性值等于div1的div标签,这个div标签相当于一个父标签,如果想要定位到这个父标签的子标签,则只能使用单斜杠。

例如,在上面的代码基础上添加/div,即整个代码为//div[@id="div1"]/div,那么显示的结果便如下

观察可以发现,整个框架下有3个div子标签,这三个标签都被选择到了。那么我们要选择三个标签中的第二个该怎么做?

有两种方法,第一种模仿前面的,通过[@属性名="属性值"]来解决,如图

 第二种方法,Xpath规则可以像python中的选择元素那样,直接通过括号来选择 [],但是,这里和python中的规则不完全一样,如果你要选择第一个子标签,你直接[1]就可以,不可以写[0],结果如下图。

到了这,如果我要选择第一题的ans1节点,该怎么写你可能大概清楚了,可以自己通过插件尝试。

那么除了通过上述的逐层向下寻找的方式,即找到大框架,然后不断找子节点的方式,还有其他方式吗?

当然是有的,即直接查看第一题ans1的属性,如下图:

其实你可以发现,在这个问卷中,每一题的答案都有一个for属性,属性值的形式是qx_y,其中x是第几题,y是第几个选项,所以另一种方法是直接//div[@for="q1_1"] ,如下图,我们成功定位了

在前面提到的内容中,关于括号 [] 的用法实际上并没有那么简单,笔者在下面举两个例子进行解释。第一个例子,如果我直接写下//div[@class="field ui-field-contain"],即选择到每一个题的大框架,具体样子如下:

那在此基础之上,我添加一个[1],返回的是什么?结果如下

这和我们上面用 [] 选择第二个子节点时的效果似乎是一样的。

那如果,我们换一串代码,写成//div[@class="ui-radio"]呢?这一串代码中的class="ui-radio"实际上对应的就是每一个选项,如下图

我们在xpath插件中输入上面的代码,观察结果

没错,整个页面的所有选项都被选中了,此时我们直接添加 [1] 会怎么样?

很奇怪,结果是把所有第一个选项选中,这是为什么?

分析一下,在第一个例子中,我们写下的//div[@class="field ui-field-contain"]会先选中每个题目对应的框架,这个问卷有5道题,所以返回的RESULTS有5个,这5个RESULTS彼此之间互为兄弟节点,且具有同一个父亲节点。

在第二个例子中,我们写下的//div[@class="ui-radio"]会选中每个选项,这5道题一共有20个选项,每个选项之间的关系并不如第一个那么简单,在这样的情况下,如果你直接写[1],只会返回所有其父亲节点的第一个选项。(即此题会返回整个选项框中的第一个 (因为每一个单独的选项的父节点就是整个选项框 ( 选项框不包含标题) ) )

我再举个例子,我们定位到每一题的标题,然后直接填[1]会怎么样?

我们先看,定位到标题的结果如下

在此基础上添加一个[1]看看

 发现,添加了[1]之后的结果完全一样,这是为什么?其实按照上面的推理就很简单了,每个标题由于没有一个共同的父节点,所以添加[1]的结果是,返回到各自的父节点之后再选择第一个子节点,结果仍然是所有标题。

问卷星刷问卷(一)xpath使用相关推荐

  1. python自动化------问卷星刷问卷3.0版本

    接上,之前做的问卷星刷问卷的功能单一,每个题目只能选一个选项.现在的3.0版本功能增加了计数器(刷了几份问卷).多选项的选择.通过滑块验证.想要了解之前的相关信息请看下面的链接: 隔壁寝室刷问卷刷疯了 ...

  2. 问卷星刷问卷python_Python+Selenium自动刷问卷星问卷

    importtimeimportrandomfrom selenium importwebdriverdefautoSelect():#将问卷星网站放在下面 driver.get('https://w ...

  3. 刷问卷星调查问卷_如何通过回答快速调查问卷从Google获得免费资金

    刷问卷星调查问卷 It is a truth universally acknowledged that a search engine in possession of a good fortune ...

  4. 问卷星复制问卷题目和选项文本方法

    问题 问卷星做好问卷后想复制自己的问卷发现复制不了 解决办法 观察问卷地址,里面有一串数字,如下面这个问卷预览状态下地址是 https://www.wjx.cn/wjx/design/previewq ...

  5. element ui select 自动向上向下弹出_[selenium]用Selenium自动填问卷星的问卷

    不知道你家单位是怎么让各位职工上报自己体温的,总之我现在好像一天要报3次这样的感觉,比如这个东西,一天要填1次.每次填报的内容都是一样样的(除了体温以外),但是不能不填,填错了还不好办,怎么办呢?能不 ...

  6. Python实现问卷星调查问卷自动填写

    文章目录 前言 一.配置环境 1.1 下载依赖selenium 1.2 安装chrome驱动 1.3 引入库 二.简易版快速上手教程 1.自定义变量 2.自定以函数 3 主函数编写 三 逐步解析 1 ...

  7. 利用GoogleTampermonkeyModify Headers实现问卷星调查问卷的自动填写提交

    前言 首先一个月没有更新博客,是因为去苏州尝试了一下暑假工,然后对于大家在博客留下的评论和问题也没有来得及回复,实在不好意思.不得不说,暑假工挺累的,而且基本上在消磨时间,说实话也不算后悔,毕竟增加了 ...

  8. 问卷星 php,问卷星API介绍

    问卷星API介绍: ⼀一.填写问卷时传递参数(如,⽤用户ID) 通过使⽤用⾃自定义链接可以通过在问卷链接中传递参数(如,您系统中 的⽤用户ID)到问卷中,并保存在问卷数据中.同时在填写完成问卷后 访问 ...

  9. 利用Selenium秒填朋友圈各种问卷星调查问卷

    目录 0️⃣ 前言 1️⃣ 实现功能 2️⃣ 代码 0️⃣ 前言 毕业季到了,要开始写论文了,朋友圈各种同学的各种课题的调查问卷,但几乎没什么人填,想帮他们随机填一填. 1️⃣ 实现功能 目前还不算完 ...

  10. 问卷星调查问卷自动填写问卷的js

    以谷歌浏览器为例子 1.打开浏览器 2.访问问卷网址 3.按键盘F12 4.点击sources,然后new snippet 5.然后添加下面的js 6.点击倒三角(或者ctr+enter) //随机选 ...

最新文章

  1. 802.1x认证协议的应用
  2. POJ 3009 Curling 2.0(简单DFS)
  3. Python练习-从小就背不下来的99乘法表
  4. mysql where条件使用了or会不会扫全表
  5. P3954 [NOIP2017 普及组] 成绩(python3实现)
  6. Linux Shell脚本入门教程系列之(六)Shell数组
  7. 计算机考研专业综合考试二,2015计算机考研大纲:专业基础综合考试大纲原文(2)...
  8. Windows 10 IoT Serials 11 – 如何设置微软认知服务中EndPoint
  9. 母子关系:DAE是COLLADA的模型文件(转载)
  10. 浏览器辅助神器:油猴脚本使用教程
  11. 计算机操作系统试题题库及答案(完整版)
  12. 基于单片机智能交通灯控制系统设计外文文献_【设计图文】单片机实现的步进电机控制系统(开题报告+论文+文献综述+外文翻译+DWG图纸)...
  13. Python 获取 Flash SWF 文件宽度和高度(Width, Height)
  14. win10共享文件夹的创建、访问凭据一直提示“用户名或密码错误”的解决办法
  15. 网络安全等保/安全合规总结
  16. 将ui文件转换为py文件
  17. C#通用类库整理--字符串处理类
  18. VxWorks6.7新建bootrom工程
  19. 像素(px)到底是个什么单位
  20. Flutter网络请求库DIO入门文档(1),android开发网

热门文章

  1. linux删除文件历史如何查看,如何恢复误删除的Linux文件
  2. PaddleDetection算法分析(7)
  3. [转载]快速实现微信扫码关注公众号/用户注册并登陆
  4. Win10精确式触摸板安装
  5. EEPROM存储电路(M24C64芯片)
  6. 独立个人项目开发心得 - 任务切分、挑战性、实用性和半途而废
  7. 阿里云ACA、ACP、ACE认证考试区别,报名入口及模拟试题分享
  8. ps的魔棒工具抠图方法
  9. iOS 16适配屏幕旋转强制转屏切换大总结
  10. koa2异常处理_【HAVENT原创】KOA2 异常处理