1. 程式人生 > 其它 >【selenium】元素定位

【selenium】元素定位

元素定位

Selenium提供了8種定位方式
1  id
2  name
3  classname
4  tag name
5  link text
6  partial link text
7  xpath
8  css selector

 

定位一個元素                          定位多個元素                             含義
find_element_by_id                    find_elements_by_id                   通過元素id定位
find_element_by_name                 find_elements_by_name                 通過元素name定位
find_element_by_class_name            find_elements_by_class_name           通過classname進行定位
find_element_by_tag_name              find_elements_by_tag_name             通過標籤定位
find_element_by_link_text             find_elements_by_link_tex             通過完整超連結定位
find_element_by_partial_link_text     find_elements_by_partial_link_text    通過部分連結定位
find_elements_by_css_selector         find_elements_by_css_selector         通過css選擇器進行定位
find_element_by_xpath                 find_elements_by_xpath                通過xpath表示式定位

 

 


 

根據id、name、classname元素定位 模擬輸入

     # 根據id查詢元素,.send_keys 輸入資訊 selenium
        chrome_browser.find_element_by_id('kw').send_keys('selenium')

        # 根據name查詢元素,找到並輸入 webdriver
        chrome_browser.find_element_by_name('wd').send_keys('webdriver')

        # 根據class查詢元素,並輸入資訊 hello world
chrome_browser.find_element_by_class_name("s_ipt").send_keys('hello world')

 

 

tag_name 標籤名定位

    # 根據標籤name查詢元素
       chrome_browser.find_elements_by_tag_name('input')

 

link_text 文字連結定位元素 

        # 根據link_text定位元素 準確定位 標籤需要是<a></a>才能定位到
        chrome_browser.find_element_by_link_text("
新聞") # 根據link_text定位元素 模糊定位 標籤需要是<a></a>才能定位到 chrome_browser.find_element_by_partial_link_text("漲價") # 元素定位 模擬使用者點選 chrome_browser.find_element_by_link_text("貼吧").click()

  

根據id、class元素定位 模擬點選

        # 根據id查詢元素,模擬使用者進行點選
        chrome_browser.find_element_by_id('su').click()

        # 根據class name查詢元素,模擬使用者進行點選
        chrome_browser.find_element_by_class_name('s_btn').click()
    def baidu_selenium(self):
        """ 百度搜索selenium """
        driver = webdriver.Chrome()  # 開啟Google瀏覽器
        driver.implicitly_wait(5)  # 未找到控制元件時 隱式等待5s
        driver.get("http://www.baidu.com")  # 開啟網址
        print("頁面標題:", driver.title)
        print("頁面url:", driver.current_url)

        time.sleep(3)  # 強制等待3s
        input_box = driver.find_element_by_class_name("s_ipt")  # class 元素定位
        input_box.send_keys("selenium")  # 模擬使用者輸入
        print("元素 標籤名:", input_box.tag_name)
        print("元素 位置:", input_box.location)
        print("元素 大小:", input_box.size)
        print("selenium_id:", input_box.id)
        print("獲取id屬性:", input_box.get_attribute("id"))
        print("獲取name屬性:", input_box.get_attribute("name"))
        print("獲取class屬性:", input_box.get_attribute("class"))

        time.sleep(5)  # 強制等待5s
        baidu_button = driver.find_element_by_id('su')  # id 元素定位
        baidu_button.click()  # 模擬使用者點選
        print("獲取id屬性:", baidu_button.get_property("id"))
        print("獲取class屬性:", baidu_button.get_attribute("class"))

        time.sleep(5)
        driver.find_element_by_name("wd").clear()  # name 元素定位 模擬使用者清空輸入框

        time.sleep(5)
        driver.quit()  # 關閉瀏覽器
示例

 

 

Xpath

表示式      描述
nodename    選取此節點的所有子節點。
/        從根節點選取(取子節點)。
//        從匹配選擇的當前節點選擇文件中的節點,而不考慮它們的位置(取子孫節點)。
.        選取當前節點。
..        選取當前節點的父節點。
@        選取屬性。
*       匹配任何元素節點
@*      匹配任何屬性節點
node()    匹配任何型別的節點

參考連結:https://www.runoob.com/xpath/xpath-tutorial.html 

 

    1、child  選取當前節點的所有子元素

     2、parent  選取當前節點的父節點

     3、descendant  選取當前節點的所有後代元素(子、孫等)

     4、ancestor  選取當前節點的所有先輩(父、祖父等)

     5、descendant-or-self  選取當前節點的所有後代元素(子、孫等)以及當前節點本身

     6、ancestor-or-self  選取當前節點的所有先輩(父、祖父等)以及當前節點本身

     7、preceding-sibling  選取當前節點之前的所有同級節點

     8、following-sibling  選取當前節點之後的所有同級節點

     9、preceding   選取文件中當前節點的開始標籤之前的所有節點

    10、following   選取文件中當前節點的結束標籤之後的所有節點

    11、self  選取當前節點

    12、attribute  選取當前節點的所有屬性

    13、namespace  選取當前節點的所有名稱空間節點

 

 

 

切換frame

# find_element_by_id()或find_element_by_class_name()
driver.switch_to.frame("xxx")

# 從子frame切換到父級frame (多重父級需要多個語句返回先輩節點)
driver.switch_to.parent_frame()

# 將焦點切換到預設frame (多重父級單條返回先輩節點)
driver.switch_to.default_content()

 

 

 

 切換選項卡

        all_tab = driver.window_handles     # 獲取所有選項卡 ,all_tab 型別為 list
        print(all_tab)
        time.sleep(3)
        driver.switch_to.window(all_tab[1])  # 切換選項卡
        print(driver.title)    

 

    def tieba(self):
        """ 貼吧 """
        driver = webdriver.Chrome()
        driver.get("http://www.baidu.com")
        driver.find_element_by_link_text("貼吧").click()
        all_tab = driver.window_handles  # 獲取所有選項卡
        print(all_tab)

        time.sleep(3)
        driver.switch_to.window(all_tab[1])  # 切換選項卡
        print(driver.title)
        driver.find_element_by_link_text("百度首頁").click()  # 對貼吧進行操作

        time.sleep(3)
        driver.switch_to.window(driver.window_handles[0])  # 再次切換選項卡
        print(driver.title)

        time.sleep(5)
        driver.find_element_by_id("kw").send_keys("微博")  # 對百度進行搜尋
        time.sleep(3)
        driver.find_element_by_id("su").click()

        time.sleep(5)
        driver.quit()
示例

 

 

 

執行結果: