XPath定位——基于Google Chrome和Firefox

来源:互联网 发布:java常用包及类 编辑:程序博客网 时间:2024/06/14 06:10

  滴~ 今日打卡!

  这几天各种加班、出差,没空写博客。But~ 自己立的flag,困着也得补完是不?!趁着今晚早点下班,补两篇博客,总结一下这几天利用碎片时间所学!

  之前博主学了用搭Python+selenium环境,并写脚本用seleniumwebdriver打开和关闭浏览器啦,接下来就是学怎样定位页面元素。

比较主流的方式似乎是XPathCSS选择器。今天先学习XPath,先学入门级,比较傻瓜式的。

  首先,学习XPath之前先了解selenium webdriver进行元素定位,提供了八种常用方式

      find_element_by_name()   使用name属性定位

      find_element_by_id()    使用元素id定位

      find_element_by_tagName()    使用元素的标签名称定位

      find_element_by_className()   使用元素的css样式表所引用的伪类名称定位

      find_element_by_linkText()   一般用于定位超文本链接,使用超文本链接上的文字信息定位

      find_element_by_partialLinkText()  上一个方法的扩展,通过对超文本链接上的部分文字信息进行匹配定位

      find_element_by_xpath()  使用元素xpath进行定位

      find_element_by_cssSelector  css选择器

  着重说一下最后两个方法,就是上面说到的XPathCSS选择器方式。写了几个脚本之后,博主感觉XPath这个方式还是挺强大的,而且也容易上手,用这种方式几乎可以定位到页面上的任意元素。But,查阅资料,了解它的实现原理后,也知道了它的一个缺点,效率低。因为使用这种方式进行定位,webdriver会将整个页面的所有元素进行扫描来找到我们所需的元素,所以当脚本中大量使用XPath方式定位,会大大降低脚本的执行速度。

     So~ cssSelector来啦,这种方式跟XPath类似,但执行速度比XPath快。

      有了大致了解之后,怎么用呢?

from selenium import webdriverdriver = webdriver.Chrome()...driver.find_element_by_xpath(' 元素的XPath表达式')

      好的,那么问题来了,怎么获取元素的XPath?
      1.Google Chrome
       安装XPath helper插件,我是在google chrome插件网(http://www.cnplugins.com/advsearch.php?q=XPath)下载的,下载下来的是.crx文件。打开谷歌浏览器,点击右上角的自定义及控制按钮--更多工具--扩展程序,把。crx文件拖到扩展程序页面,就会弹出确认安装弹窗,安装控件。
      



     安装好之后使用shift+ctrl+x 快捷键调用或关闭插件,移动鼠标到元素上就可以查看元素的xpath。效果如下图

      2.Firefox
      安装FirePath:在火狐浏览器中打开附加组件——插件,搜索FirePath,点击安装FirePath


      重启火狐,就可以用啦~  右击元素,选择inspect in FirePath