xpath 的定位方法,非常强大.使用这种方法几乎可以定位到页面上的任意元素。
1. 什么是xpath?
xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XML页面,所以我们可以使用Xpath 的用法来定位页面元素。
2. xpath的缺点
xpath 这种定位方式,webdriver会将整个页面的所有元素进行扫描以定位我们所需要的元素,这是个非常费时的操作,如果脚本中大量使用xpath做元素定位的话,脚本的执行速度可能会稍慢;
3. 绝对路径定位
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="div1"> <input name="div1input"/> <a href="http://www.sogou.com">搜狗搜索</a> <img alt="div1-img1" src="http://www.sogou.com/images/logo/new/sogou.png" href="http://www.sogou.com">搜狗图片</img> <input type="button" value="查询"/> </div> <br /> <div name="div2"> <input name="div2iniput"/> <a href="http://www.baidu.com">百度搜索</a> <img alt="div2-img2" src="http://www.baidu.com/img/bdlogo.png" href="http:/www.baidu.com">百度图片</img> </div> </body> </html>
以上面的test.html举例,想要定位到查询按钮,则用绝对路径定位就是:
browser.find_element_by_xpath("/html/body/div/input[@value='查询']")
这样定位的缺点就是:
一旦页面结构发生改变,改路径也随之失效,必须重新。 所以不推荐使用绝对路径的写法;
4. 相对路径定位
相对路径定位:
browser.find_element_by_xpath("//input[@value='查询']")
5. 绝对路径和相对路径的区别
绝对路径 以 "/" 开头, 让xpath 从文档的根节点开始解析;
相对路径 以"//" 开头, 让xpath 从文档的任何元素节点开始解析;
6. 使用索引号定位
browser.find_element_by_xpath("//input[2]")
7. 利用元素属性定位
browser.find_element_by_xpath("//input[@id='wd']")
8. 用by定位元素
有时需要使用定位方法,在具体通过哪种定位方式(id 或 name)根据实际场景而定位,By 就可以设置定位策略。
browser.find_element(By.ID,'kw') browser.find_element(By.NAME,"wd") browser.find_element(By.CLASS_NAME,"s_ipt") browser.find_element(By.TAG_NAME,"input") browser.find_element(By.LINK_TEXT,u"新闻") browser.find_element(By.PARTIAL_LINK_TEXT,u"新") browser.find_element(By.XPATH,"//*[@class='bg s_btn']") browser.find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")
find_element()方法只用于定位元素。它需要两个参数,第一个参数是定位方式,这个由 By 提供;第二个参数是定位的值。在使用 By 时需要将 By 类导入。
from selenium.webdriver.common.by import By
ps:如果在使用过程中发现pycharm没有提示,那么说明你导入了假的selenium,需要进入到python的安装目录,python.exe的同级目录下手动删除selenium文件夹;
9. 使用浏览器调试工具直接获取xpath语句