前提條件:先要引入webdriver模塊,建立一個Chrom瀏覽器對象,以及打開一個網頁(以百度爲例)。python
1 from selenium import webdriver 2 3 driver = webdriver.Chrome() 4 5 driver.get('http://www.baidu.com')
driver.find_element_by_id('kw')
備註:web
driver.find_elements_by_name('wd') # 返回的是列表,找出來的元素不必定是惟一的
driver.find_element_by_name('wd') # 只會返回找到的第一個元素
實例:瀏覽器
new_ele = driver.find_element_by_name('tj_trnews') print(new_ele.text) # 獲取元素的文本 print(new_ele.get_attribute('href')) # get_attribute方法用於獲取某個元素的某個屬性 print(new_ele.tag_name) # 使用這種不惟一的屬性定位元素時。能夠如今網頁上用js定位一下看屬性是不是惟一的 # 一個類的方法上有@property,表示把一個方法變爲一個屬性,叫作動態屬性
d = driver.find_element_by_class_name('s_btn') d1 = driver.find_elements_by_class_name('s_btn')
a = driver.find_element_by_link_text('新聞')
b = driver.find_element_by_partial_link_text('新') # 經過一部分查找
一、定義session
Xpath即爲XML(XML Path Languagr),他是一種用來肯定XML文檔中某個部分的語言。編碼
組合:能夠過濾不少元素。spa
層級關係:code
二、使用方法orm
//input[@class='s_ipt'] (謂語條件)
//input[@class='s_ipt' and not @name='wd' and @id='kw']對象
//input[text()='新聞']
//input[contains(text(), 'value')]
//input[contains(@class, 'value')]blog
元素構成:
//相對定位[謂語條件(@class='')]/子元素tag[謂語條件]
軸定位/軸運算:囉嗦復古的寫法,可是更加靈活。
經過相對路徑定位
//parent::form[@id='form']
//軸關係::元素類型[謂語條件]
//input[@name='ie']//parent::form[@id='form']
//input[@name='ie']//parent::form[@class, 'value']
*表示 通配符
暫時沒總結
""" _*_ coding: utf - 8 _*_ @Time :2019/7/14:23:32 @Author :lemon_qiao @Email :841195863@qq.com @File :八大元素定位練習.py @ Software:PyCharm Community Edition """ from selenium.webdriver import Chrome driver = Chrome() driver.get('http://www.baidu.com') # 一、ID定位 by_id = driver.find_element_by_id('kw') # 百度首頁的輸入框 print('by_id定位的ype爲:【{}】,value爲:【{}】'.format(type(by_id), by_id)) # 二、name定位 by_name = driver.find_element_by_name('wd') # 百度首頁的輸入框 by_name1 = driver.find_elements_by_name('wd') # 百度首頁的輸入框 print('by_name的type爲:【{}】,value爲:【{}】'.format(type(by_name), by_name)) print('by_name1的type爲:【{}】,value爲:【{}】'.format(type(by_name1), by_name1)) # 三、classname定位 # by_class = driver.find_element_by_class_name('btn self-btn bg s_btn') 有空格會報錯 by_class = driver.find_element_by_class_name('s_btn') by_class1 = driver.find_elements_by_class_name('s_btn') print('by_class的type爲:【{}】,value爲:【{}】'.format(type(by_class), by_class)) print('by_class1的type爲:【{}】,value爲:【{}】'.format(type(by_class1), by_class1)) # 四、tagname標籤名定位 by_tag = driver.find_element_by_tag_name('input') print('by_tag的value爲:【{}】:'.format(by_tag)) # 五、超連接定位 a = driver.find_element_by_link_text('新聞') print('超連接定位a的type爲:【{}】,value爲:【{}】'.format(type(a), a)) # 六、partialLink定位 b = driver.find_element_by_partial_link_text('新') # 經過一部分查找 print('partialLink定位b的ype爲:【{}】,value爲:【{}】'.format(type(b), b)) # 七、Xpath定位 c = driver.find_element_by_xpath("//a[text()='學術']") # d = driver.find_element_by_xpath("//span[contains(@class, 'refresh')]") d = driver.find_element_by_xpath("//input[@class='s_ipt' and @name='wd' and @id='kw']") print('Xpath定位c的ype爲:【{}】,value爲:【{}】'.format(type(c), c)) print('Xpath定位d的ype爲:【{}】,value爲:【{}】'.format(type(d), d)) e = driver.find_element_by_xpath("//a[contains(text(), '123')]") f = driver.find_element_by_xpath("//input[contains(@class, 'ipt')]") # 軸定位 h = driver.find_element_by_xpath("//input[@name='ie']//parent::form[@id='form']") print(h)
運行結果:
by_id定位的ype爲:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value爲:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-1")>】 by_name的type爲:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value爲:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-1")>】 by_name1的type爲:【<class 'list'>】,value爲:【[<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-1")>]】 by_class的type爲:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value爲:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-2")>】 by_class1的type爲:【<class 'list'>】,value爲:【[<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-2")>]】 by_tag的value爲:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-3")>】: 超連接定位a的type爲:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value爲:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-4")>】 partialLink定位b的ype爲:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value爲:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-4")>】 Xpath定位c的ype爲:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value爲:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-5")>】 Xpath定位d的ype爲:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value爲:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-1")>】 <selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-7")>