天天看點

[Python爬蟲] Selenium實作自動登入163郵箱和Locating Elements介紹

        前三篇文章介紹了安裝過程和通過selenium實作通路firefox浏覽器并自動搜尋"eastmount"關鍵字及截圖的功能。而這篇文章主要簡單介紹如何實作自動登入163郵箱,同時繼續介紹selenium+python官網locating elements部分内容。

        希望該篇基礎性文章對你有所幫助,如果有錯誤或不足之處,請海涵~

        注意:好像通路浏覽器在c盤會自動生成檔案越來越小,但可以清理,不知道為啥?

        代碼如下所示:

        運作結果如下圖所示,自動打開firefox浏覽器并輸入使用者名和密碼實作郵箱登入。

[Python爬蟲] Selenium實作自動登入163郵箱和Locating Elements介紹

        代碼非常簡單,其中的原理也很簡單:通過driver通路firefox浏覽器及url,同時find_element_by_name找到網頁html源代碼中對應的值并填充,最後調用keys實作模拟操作鍵盤keys.return實作。該斷言結果是不存在的,主要是用于防止關閉浏覽器。

        同時輸入使用者名或密碼錯誤會提示,其實就是浏覽器。

[Python爬蟲] Selenium實作自動登入163郵箱和Locating Elements介紹

原了解釋 

        兩年前在學習c#網絡程式設計時,我成寫過winform自動通路163郵箱的文章:

        通過對比,python簡短高效的優勢就顯示出來的,其中163郵箱登入界面html源碼也沒有修改和修複過,這是我意料之外的。

        其中通過查找該登入頁面發現使用者名id為“idinput”,密碼id為“pwdinput”,登入按鈕id為“loginbtn”。如圖id和name:

          <input class="" tabindex="1" title="請輸入帳号" id="idinput" name="username" type="text" value=""..

          <input class="" tabindex="2" title="請輸入密碼"

id="pwdinput" name="password" type="password" />

          <button id="loginbtn" class="" type="submit">登  錄</button>

        如下圖所示一目了然:

[Python爬蟲] Selenium實作自動登入163郵箱和Locating Elements介紹

        這部分文章雖然簡單,但是作為基礎文章在合适不過了,同時通過webdriver的driver.find_element_by_name引出下面的基礎知識介紹,畢竟實踐例子才是學習selenium的動力源泉。

        同樣下面這段代碼可實作自動登入csdn,是不是可以通過它實作暴力破解密碼呢?

        ps:第一次上傳翻譯博文,如果有錯誤還請見諒!

        這裡有各種政策用于定位網頁中的元素(locate elements),你可以選擇最适合的方案,selenium提供了一下方法來定義一個頁面中的元素:

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

        下面是查找多個元素(這些方法将傳回一個清單):

find_elements_by_name

find_elements_by_xpath

find_elements_by_link_text

find_elements_by_partial_link_text

find_elements_by_tag_name

find_elements_by_class_name

find_elements_by_css_selector

        除了上面給出的公共方法,這裡也有兩個在頁面對象定位器有用的私有方法。這兩個私有方法是find_element和find_elements,用法示例:

       這些都是通過類可擷取的屬性:

       當你知道一個元素的id屬性時使用該功能。有了這個方法,用id屬性值比對時第一個被定位的元素将被傳回。如果沒有元素比對id值,一個nosuchelementexception異常将會抛出。例如,參考這個頁面源碼:

        表單form元素可以被如下方式定位:

        當你知道一個元素的name屬性時使用該方法。通過該方法,第一個滿足name屬性值的元素将被比對傳回,如果沒有元素比對,将抛出一個nosuchelementexception異常。例如,參考下面源碼:

        定位username&password元素方法如下:

        在"clear"按鈕之前會給出"login"登入按鈕:

        這個表單form元素可能通過如下方法被定位:

        [1] 絕對路徑(如果html有稍微的改動,就會被破壞)

        [2] 在html中的第一個表單元素

        [3] 指定屬性名稱為id且值為loginform的表單元素

        定位username元素的方法如下:

        [1] 第一個form元素通過一個input子元素,name屬性和值為username實作

        [2] 通過id=loginform值的form元素找到第一個input子元素

        [3] 屬性名為name且值為username的第一個input元素

         定位"clear"按鈕元素的方法如下:

        [1] 屬性名為name其值為continue和屬性名為type其值為button的input控件

        [2] 屬性id=loginform的form元素的第四個input子元素

        上面這些例子涉及一些基礎知識,更多詳情請參考下面的建議:

<a target="_blank" href="http://www.w3schools.com/xpath/">w3schools xpath tutorial</a>

<a target="_blank" href="http://www.w3.org/tr/xpath">w3c xpath recommendation</a>

        這裡也有幾個非常實用的附加元件,可以幫助發現元素的xpath:

xpath suggestions are just one of the many powerful features of this very useful add-on.

        當你知道一個錨标記内使用連結文本就使用該方法。通過這個政策,第一個比對這個link text值的元素将被傳回。如果沒有元素比對這個連結文本,将抛出一個nosuchelementexception異常。示例的源代碼如下:

        這個continue.html連結定位的方法如下,partial表示部分比對:

        當你想通過tag name(标記名)定位一個元素時可以使用該方法。同樣,第一個給出的tag name元素将被傳回,如果沒有比對的标記名,将抛出一個nosuchelementexception異常。示例的源代碼如下:

        定位heading(h1)元素的方法如下:

        介紹類似,用于通過類屬性名(class attribute name)進行定位一個元素。示例源代碼如下:

        其中元素"p"的定位方法如下:

        當你想要通過css選擇器文法定位一個元素時,可以使用該方法。它将傳回第一個與css選擇器比對的元素,如果沒有比對css選擇器的元素,将傳回一個nosuchelementexception異常。執行個體源代碼如下所示:

        sauce實驗室有非常好的關于css選擇器的文檔: