以百度为例,首先,用F12-开发者模式查看元素,如图
一、通过id定位:find_element_by_id()
1.可以在图中看到,这个搜索框的id=“kw”,这里可以通过它的id属性单位到这个元素。
2.定位到搜索框后,用send_keys()方法键入搜索值
#coding=UTF-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#通过ID定位搜索框
driver.find_element_by_id("kw").send_keys("testing")
driver.find_element_by_id("su").click()
driver.quit()
二、通过name定位:find_element_by_name()
1.从上面定位到的元素属性中,可以看到有个name属性:name=“wd”,这里可以通过它的name属性单位到这个元素。
#coding=UTF-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#通过name定位搜索框
driver.find_element_by_name("wd").send_keys("testing")
driver.find_element_by_id("su").click()
driver.quit()
说明:这里运行后会报错,说明这个搜索框的name属性不是唯一的,无法通过name属性直接定位到输入框
三、通过class定位:find_element_by_class_name()
1.从上面定位到的元素属性中,可以看到有个class属性:class=“s_ipt”,这里可以通过它的class属性定位到这个元素。
#coding=UTF-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#通过class定位搜索框
driver.find_element_by_class_name("s_ipt").send_keys("testing")
driver.find_element_by_id("su").click()
driver.quit()
四、通过tag定位:find_element_by_tag_name()
1.从上面定位到的元素属性中,可以看到每个元素都有tag(标签)属性,如搜索框的标签属性,就是最前面的input
2.很明显,在一个页面中,相同的标签有很多,所以一般不用标签来定位。
五、通过link定位:find_element_by_link_text()
查看页面元素:
<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
这里新闻就是个超链接,这种元素就可以用link定位的方式来定位
#coding=UTF-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#通过link定位新闻按钮
driver.find_element_by_link_text("新闻").click()
driver.quit()
六、通过partial_link定位:find_element_by_partial_link_text()
1.有时候一个超链接它的字符串可能比较长,如果输入全称的话,会显示很长,这时候可以用一模糊匹配方式,截取其中一部分字符串就可以了
2.如“新闻”,只需输入“闻”也可以定位到
#coding=UTF-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#通过partial_link定位“新闻”按钮
driver.find_element_by_partial_link_text("闻").click()
driver.quit()
deng deng deng deng!重点来了!
七、通过xpath定位:find_element_by_xpath()
1.以上定位方式都是通过元素的某个属性来定位的,如果一个元素它既没有id、name、class属性也不是超链接,这么办呢?或者说它的属性很多重复的。这个时候就可以用xpath解决
2.xpath是一种路径语言,跟上面的定位原理不太一样,首先第一步要先学会用工具查看一个元素的xpath
3.在火狐浏览器种增加插件xPath Finder
4.如图,点击右上角xPath Finder图标,查看xpath的地址
#coding=UTF-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#通过xpath定位搜索框
driver.find_element_by_xpath("//*[@id=‘kw’]").send_keys("testing")
#这里要把双引号改成单引号
driver.find_element_by_id("su").click()
driver.quit()
关于不使用工具如果通过Xpath来定位,后续总结。
八、通过css定位:find_element_by_css_selector()
CSS定位和Xpath定位类似。但是CSS定位更快,语法更简洁。不过速度快这条基本上也可以忽略,因为都很快,也察觉不出来那一点点差距,还是看个人操作习惯吧。
这里举个例子,关于详细的定位方式,也留后续总结。
如图,是开发者模式下定位显示的数据,这三个属性都可以用来定位。这里用id“#kw”定位
#coding=UTF-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#通过css定位搜索框
driver.find_element_by_css_selector("#kw").send_keys("testing")
driver.find_element_by_id("su").click()
driver.quit()