python+selenium如何定位頁面的元素,有幾種定位元素的方法?


首先,感謝MrCandy【selenium學習筆記一】python + selenium定位頁面元素的辦法。一文,在該文章中找到了解決我當前遇到問題的方法。

遇到的問題描述:

  簡單的的編寫一個登錄的腳本,但是在定位頁面元素的地方出現了問題。我使用driver.find_element_by_id("loginForm").click()方法來定位‘登錄’按鈕元素,但其實該id對應的不僅僅是登錄這個按鈕所代表的區域,而是包括登錄名、密碼已經登錄按鈕在內的一整個區域,所示使用find_element_by_id來定位並播放時不能夠正常進入,並報出”AttributeError: 'FirefoxWebElement' object has no attribute 'ckick'“錯誤,沒辦法,因為當時快下班了所以想了一個比較取巧的辦法,那就是在輸入登錄密碼后做一個‘回車’的鍵盤輸入,已達到登錄的目的,如“driver.find_element_by_id("password").send_keys(Keys.ENTER)

  今天是周末就想着來公司看看,畢竟這么普及的一個工具不應該沒有應對我這種問題的辦法,所以很湊巧的我看到了上面連接中的這篇文章

  下面我將復制該文章的部分內容,若要查看完整內容,請點擊原文地址查看

  Python:

  1)查找元素的ID。

 

    from selenium import webdriver

 

    browser = webdriver.Firefox()

 

    browser.find_element_by_id("Element's id")

 

  2)通過元素的name來定位。

 

    browser.find_element_by_name("Element's name")

 

  3)通過所應用的樣式表名className。

 

    browser.find_element_by_class_name("class name")

 

  4)通過CSS應用特征。

 

    find_element_by_css_selector("a[id='id']")

 

  5)通過鏈接的文本。

 

    browser.find_element_link_name("link name")

 

  6)通過XPATH定位。

 

    browser.find_element_by_xpath("//***[*='**']")

  看完上面這些,對我的代碼進行了幾種改進,實驗結果證明上面方法都是可行有效的。

  下面是對幾種定位方法的演示,演示訪問的地址位移動網站地址。

 

from selenium import webdriver
import time
import re
#做一個等待的通用方法
def sleep(sec=3):
    time.sleep(sec)

driver = webdriver.Firefox()
driver.get("http://m.mail.10086.cn")
sleep()
driver.find_element_by_name("UserName").send_keys("longname")
sleep()
driver.find_element_by_css_selector(".textBox_pw").send_keys("password") #使用class定位方式
sleep()
driver.find_element_by_id("loginBtn").click()
sleep(10)
line = driver.current_url
matchObj = re.match(r'(^.*?.cn).*$',line,re.M|re.I)
print(matchObj.group(1)) #輸出當前的瀏覽器地址(不包含詳細地址和參數)
driver.find_element_by_xpath(".//*[@id='logout']/a/i").click()
sleep()
driver.find_element_by_link_text("重新登錄").click()
sleep()
driver.quit()

 

 

 

  順便在這里提出一個現在遇到的還沒有得到解決的問題,那就是我再使用selenium的時候,IE和谷歌瀏覽器在寫好腳本后能夠正常在firefox運行但是不能在這兩個瀏覽器運行的問題,驅動我都已經放在path路徑下面了,但是在打開瀏覽器時還是會報錯。希望有經驗的博友可以為我解答。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM