如何 获取网页元素的xpath

如何 获取网页元素的xpath,第1张

1 利用Selenium IDE

我们可以通过firefox添加插件Selenium IDE并开启。当点击红色的录制按钮后,我们对网页进行 *** 作后,该工具会录制所有的行为并转化为selenium命令,当然也就包含有了locator。

方法优点:简单、方便

方法不足:对于一些复杂点的行为可能会漏掉,因此也就无法捕获相应的locator;此外locator是自动获取的,可能不是很直观,另外无法得到统一样式的locator。

2 利用Firebug

同样firefox的插件中可以添加firebug。在Tools->Web Developer->Firebug中打开Firebug,于是能够看到页面的下半部分有显示Firebug窗口,可以查看HTML,CSS等。因为了解的粗浅,所以只能说说知道的几点简单功能。

如果我们需要查看页面某个元素的locator,可以鼠标右击,选择Inspect Element with Firebug, 于是就到了元素对应的html源码位置。这样我们根据这部分源码来写locator。

但是,往往对于一些element如button等,右击后没有反应时,我们可以考虑选择它们旁边的元素进行,到源码后再通过查找其兄弟元素源码或者上一层来找到相应源码。这里主要根据是当我们鼠标放在以某tag为根节点的源码的上时,上面的页面对应的界面元素会有相应标记。

方法缺点:写出的locator可能并不是页面的唯一,这样selenium运行就难以识别

最近在自学JAVA的过程中,偶然想到了做个爬虫程序,经过简单的对比,发现了WebMagic这个库,在使用库的过程中因为涉及到正则表达式和XPATH,所以做个笔记,记录一下,否则稍微过段时间不看就忘记了。

以内涵社区为例,打开 内涵社区 ,然后右键“检查”(Chrome浏览器,得到如下html,这里只截取其中一部分作为示例)

然后,开始我们的爬虫程序:

创建一个类GithubRepoPageProcessor(为什么叫Github因为跟着写demo的时候创建的,懒得修改了)继承PageProcessor,并实现方法:

好,那么这里就要用正则和XPATH提取我们需要的内容了:

先来看下正则表达式的常用字符:

接下来使用上面的html文件依次举例:

1、获取所有的数字

扩展例子:

2、获取所有p标签里的内容

3、获取所有的href内容

分析GithubRepoPageProcessor里面的内容:

创建MainApp写入main方法并调用运行

最终效果:

相信写过爬虫的同学,都知道XPath的存在。博主最近在学习 Scrapy 的时候,就了解了一下XPath语法,这里给大家简单地介绍一下:

首先我们需要了解几个 XPath 术语。

2017/3/3 16:02:29

在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。

以下面这xml文档为例:

上面例子的节点为:

父:每个元素以及属性都有一个父。例子中<student>的父是<class>;

子:元素节点可有零个、一个或多个子。例子中<class>的子是<student>;

兄弟:拥有相同的父的节点。例子中<name>和<ID>是兄弟;

祖先:某节点的父、父的父,等等。

后代:某节点的子、子的子,等等。

基本值是无父或无子的节点。

上面例子的基本值为:

项目是基本值或者节点。

ok,接下来开始正式讲解 XPath 语法(注意,以下表达式当然可以混合使用):

选取此节点的所有子节点。

从根节点选取。

从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

选取当前节点。

选取当前节点的父节点。

选取属性。

对于如下的xml文档(参照 >

//a[@href="/wt/common/wangyicom"] 这个定位到节点,

得到节点node 取InnerText

// var goodName= docDocumentNodeSelectSingleNode("//h3[@class='goods-title']");

// // MessageBoxShow(goodNameInnerText);

>

对于网页数据抓取,有BeautifulSoup、lxml以及正则表达式三种方法,其中正则表达式过于复杂,而beautifulsoup和lxml使用起来较为方便。以前简单使用过beautifulsoup(美味汤),后面为了扩展一下,熟悉一下lxml进行数据抓取。

先贴一个lxml的简单框架:

其中,最主要的在于xpath路径的获取和解析,而XPath就是地址,具体地,就是需要知道所要寻找的内容处在哪个地址下。一般而言,我们可以根据开发者工具来定位我们需要的元素,然后右击选择其所在xpath,选择初步的路径,如下图所示,

这只是一种简单的方法,更重要的,需要掌握xpath的语法规则,下面分别论述。

使用xpath获取信息,主要包括获取本文和获取属性,基本用法为

对比可以看出,一个是采用text()获取文本,一个是采用@属性获取属性值。而前面标签后面方括号就是来对标签进行筛选的。一般而言,通过选择器可以获取诸如/html/body/div[@class="useful"]/ul/li/text()的信息,但是开头的信息没有标志性,采用//div[@class="useful"]/ul/li/text()即可。

这个地方即涉及到了xpath的语法选择,主要包括以下几点:

而在选择器方面,包括以下几个

除此之外,在获取了一个元素之后,我们需要获取其下面元素的属性,即要对基于xpath获取的元素再次采用xpath,此时的获取方式为:

另外,我们也可以获取节点下面所有的字符串,方法为string(),示例为:

懒得打字了,下面的截图来自W3Cschool, >

在定位第一个栏目并模拟点击时,无法使用click方法,原来是左边的图标遮挡了a标签,导致无法点击。

driverfind_element_by_xpath("//a[text()='xxx']")click()

这个时候要使用ENTER方法:

from seleniumwebdrivercommonkeys import Keys

driverfind_element_by_xpath("//a[text()='xxx']")send_keys(KeysENTER)

扩展资料

Firebug和Firepath,基本上足够你去定位元素了,如果你对XPATH熟悉,Firebug一个就足够了。

主要的定位方式:id,name,identifier,js,link,css如果这些都不行,那么用xpath几乎能百发百中的

能用固定的属性,比如id,name(当然要唯一),tagname等的,尽量去用。没办法了再用XPATH,这样后期维护会省很多力气,减少因为程序员调皮改代码影响你的脚本。

开源和价格不谈以外,QTP有keyword view不会编程的照样做自动化,webdriver就会傻瞪眼,除非谁还把seleniumIDE挖出来玩玩。

以上就是关于如何 获取网页元素的xpath全部的内容,包括:如何 获取网页元素的xpath、通过WebMagic认识正则表达式和XPATH教程、XPath语法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9737540.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存