一、获取元素
1)通过谷歌浏览器自动的工具访问百度首页,我们可以看到,页面上的元素都是由一行行的代码组成的,它们之间有层级地组织起来,每个元素之间都有不同的标签和值,我们可以通过这些不同的标签和值来找到这些元素。
如下图所示,通过定位工具,我们定位到“百度一下”搜索框的元素了。
2)webdriver提供了八种定位方式,分别是
- find_element_by_id
- find_element_by_name
- find_element_by_xpath
- find_element_by_link_text
- find_element_by_partial_link_text
- find_element_by_tag_name
- find_element_by_class_name
- find_element_by_css_selector
二、定位元素
1)使用find_element_by_id 方式定位元素
根据上图所示,可以明显的知道“百度一下”搜索框的id=“su”,所以可以得知 driver.find_element_by_id(“su”)
2)使用find_element_by_name方式定位元素
HTML规定name来指定元素的名称,因此它的作用更像是人名,name的值在页面中可以不唯一,通过定位工具定位到百度搜索输入框的name值为“wd”
所以可以得知driver.find_element_by_name(“wd”)
3)使用find_element_by_xpath方式定位元素
这里要介绍一下如何获取页面元素的xpath路径的方法,如果你是大神可以自己写,如果跟作者一样很喽,可以通过开发者工具获取,选择元素右击->Copy->Copy Xpath,可以直接拷贝到xpath路径.
所以可以得知driver.find_element_by_xpath(“//*[@id=‘kw’]”)
4)使用find_element_by_link_text和find_element_by_partial_link_text方式定位元素
通过文字链接来定位元素,他们两个很相像,功能也很类似,但是他们一个是匹配全部,一个是匹配部分,可以参考下图。
所以可以得知driver.find_element_by_link_text(“贴吧”)
三、实例
参考了这么多方法来定位元素,下面来看看这个登录百度贴吧的实例
1 #coding=utf-8 2 from selenium import webdriver 3 import time 4 5 driver = webdriver.Chrome() 6 driver.get("http://www.baidu.com") 7 driver.find_element_by_name("tj_trtieba").click() 8 driver.find_element_by_name("kw1").send_keys("三星S8") 9 time.sleep(2) 10 driver.find_element_by_link_text("进入贴吧").click() 11 time.sleep(2) 12 driver.find_element_by_xpath("//*[@id='com_userbar']/ul/li[4]/div/a").click() 13 time.sleep(1) 14 driver.find_element_by_id("TANGRAM__PSP_11__footerULoginBtn").click() 15 time.sleep(2) 16 driver.find_element_by_id("TANGRAM__PSP_11__userName").clear() 17 driver.find_element_by_id("TANGRAM__PSP_11__userName").send_keys("xxxxx") 18 time.sleep(2) 19 driver.find_element_by_id("TANGRAM__PSP_11__password").clear() 20 driver.find_element_by_id("TANGRAM__PSP_11__password").send_keys("xxxxx") 21 time.sleep(2) 22 driver.find_element_by_id("TANGRAM__PSP_11__submit").click() 23 driver.quit()
下面再推荐一个新手练习定位元素的网站:http://sahitest.com/demo/index.htm