欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
[Python爬蟲(chóng)] Selenium實(shí)現自動(dòng)登錄163郵箱和Locating Elements介紹

一. Selenium自動(dòng)登錄

        代碼如下所示:

[python] view plaincopy
  1. from selenium import webdriver  
  2. from selenium.webdriver.common.keys import Keys  
  3. import time  
  4.   
  5. #模擬登陸163郵箱  
  6. driver = webdriver.Firefox()  
  7. driver.get("http://mail.163.com/")  
  8.   
  9. #用戶(hù)名 密碼  
  10. elem_user = driver.find_element_by_name("username")  
  11. elem_user.send_keys("15201615157")  
  12. elem_pwd = driver.find_element_by_name("password")  
  13. elem_pwd.send_keys("********")  
  14. elem_pwd.send_keys(Keys.RETURN)  
  15. time.sleep(5)  
  16. assert "baidu" in driver.title  
  17. driver.close()  
  18. driver.quit()  
        運行結果如下圖所示,自動(dòng)打開(kāi)Firefox瀏覽器并輸入用戶(hù)名和密碼實(shí)現郵箱登錄。


        代碼非常簡(jiǎn)單,其中的原理也很簡(jiǎn)單:通過(guò)driver訪(fǎng)問(wèn)Firefox瀏覽器及URL,同時(shí)find_element_by_name找到網(wǎng)頁(yè)HTML源代碼中對應的值并填充,最后調用Keys實(shí)現模擬操作鍵盤(pán)Keys.RETURN實(shí)現。該斷言結果是不存在的,主要是用于防止關(guān)閉瀏覽器。
        同時(shí)輸入用戶(hù)名或密碼錯誤會(huì )提示,其實(shí)就是瀏覽器。

原理解釋 
        兩年前在學(xué)習C#網(wǎng)絡(luò )編程時(shí),我成寫(xiě)過(guò)Winform自動(dòng)訪(fǎng)問(wèn)163郵箱的文章:

        C# 網(wǎng)絡(luò )編程之網(wǎng)頁(yè)自動(dòng)登錄 (一).使用WebBrower控件模仿登錄
        通過(guò)對比,Python簡(jiǎn)短高效的優(yōu)勢就顯示出來(lái)的,其中163郵箱登錄界面HTML源碼也沒(méi)有修改和修復過(guò),這是我意料之外的。
        其中通過(guò)查找該登錄頁(yè)面發(fā)現用戶(hù)名Id為“idInput”,密碼Id為“pwdInput”,登錄按鈕ID為“l(fā)oginBtn”。如圖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>

        如下圖所示一目了然:


        這部分文章雖然簡(jiǎn)單,但是作為基礎文章在合適不過(guò)了,同時(shí)通過(guò)webdriver的driver.find_element_by_name引出下面的基礎知識介紹,畢竟實(shí)踐例子才是學(xué)習Selenium的動(dòng)力源泉。
        同樣下面這段代碼可實(shí)現自動(dòng)登錄CSDN,是不是可以通過(guò)它實(shí)現暴力破解密碼呢?
[python] view plaincopy
  1. from selenium import webdriver  
  2. from selenium.webdriver.common.keys import Keys  
  3. import time  
  4.   
  5. driver = webdriver.Firefox()  
  6. driver.get("https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn")  
  7. elem_user = driver.find_element_by_name("username")  
  8. elem_user.send_keys("Eastmount")  
  9. elem_pwd = driver.find_element_by_name("password")  
  10. elem_pwd.send_keys("********")  
  11. elem_pwd.send_keys(Keys.RETURN)  
  12. time.sleep(5)  
  13. assert "baidu" in driver.title  
  14. driver.close()  
  15. driver.quit()  



二. Locating Elements介紹


        PS:第一次上傳翻譯博文,如果有錯誤還請見(jiàn)諒!
        官網(wǎng)地址:http://selenium-python.readthedocs.org/locating-elements.html
        這里有各種策略用于定位網(wǎng)頁(yè)中的元素(locate elements),你可以選擇最適合的方案,Selenium提供了一下方法來(lái)定義一個(gè)頁(yè)面中的元素:
  • 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
        下面是查找多個(gè)元素(這些方法將返回一個(gè)列表):
  • 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
        除了上面給出的公共方法,這里也有兩個(gè)在頁(yè)面對象定位器有用的私有方法。這兩個(gè)私有方法是find_element和find_elements,用法示例:
[python] view plaincopy
  1. from selenium.webdriver.common.by import By  
  2.   
  3. driver.find_element(By.XPATH, '//button[text()="Some text"]')  
  4. driver.find_elements(By.XPATH, '//button')  
       這些都是通過(guò)類(lèi)可獲取的屬性:
[python] view plaincopy
  1. ID = "id"  
  2. XPATH = "xpath"  
  3. LINK_TEXT = "link text"  
  4. PARTIAL_LINK_TEXT = "partial link text"  
  5. NAME = "name"  
  6. TAG_NAME = "tag name"  
  7. CLASS_NAME = "class name"  
  8. CSS_SELECTOR = "css selector"  

1 Locating By Id

       當你知道一個(gè)元素的id屬性時(shí)使用該功能。有了這個(gè)方法,用id屬性值匹配時(shí)第一個(gè)被定位的元素將被返回。如果沒(méi)有元素匹配id值,一個(gè)NoSuchElementException異常將會(huì )拋出。例如,參考這個(gè)頁(yè)面源碼:

[html] view plaincopy
  1. <html>  
  2.  <body>  
  3.   <form id="loginForm">  
  4.    <input name="username" type="text" />  
  5.    <input name="password" type="password" />  
  6.    <input name="continue" type="submit" value="Login" />  
  7.   </form>  
  8.  </body>  
  9. <html>  
        表單form元素可以被如下方式定位:
[python] view plaincopy
  1. login_form = driver.find_element_by_id('loginForm')  

2 Locating By Name

        當你知道一個(gè)元素的name屬性時(shí)使用該方法。通過(guò)該方法,第一個(gè)滿(mǎn)足name屬性值的元素將被匹配返回,如果沒(méi)有元素匹配,將拋出一個(gè)NoSuchElementException異常。例如,參考下面源碼:

[html] view plaincopy
  1. <html>  
  2.  <body>  
  3.   <form id="loginForm">  
  4.    <input name="username" type="text" />  
  5.    <input name="password" type="password" />  
  6.    <input name="continue" type="submit" value="Login" />  
  7.    <input name="continue" type="button" value="Clear" />  
  8.   </form>  
  9. </body>  
  10. <html>  
        定位username&password元素方法如下:
[python] view plaincopy
  1. username = driver.find_element_by_name('username')  
  2. password = driver.find_element_by_name('password')  
        在"Clear"按鈕之前會(huì )給出"Login"登錄按鈕:
[python] view plaincopy
  1. continue = driver.find_element_by_name('continue')  

3 Locating By XPath


        XPath是用于定位XML文檔中節點(diǎn)的語(yǔ)言。正如HTML可以是XML(XHTML)的一個(gè)實(shí)現,Selenium用戶(hù)可以利用這個(gè)強大的語(yǔ)言來(lái)跟蹤Web應用程序中的元素。XPath擴展已經(jīng)超出(以及支持)了按照id或name屬性定位的簡(jiǎn)單方法,并開(kāi)發(fā)了各種新的可能,如定位頁(yè)面上的第三個(gè)復選框(checkbox)。
        其中使用XPath的一個(gè)主要原因是:當你沒(méi)有一個(gè)合適的ID或Name屬性來(lái)定位你需要查找的元素時(shí),你可以使用XPath去定位這個(gè)絕對元素(不建議這樣),或者相對一個(gè)有id或name屬性的元素定位。XPath定位器也可以通過(guò)其他不止是id和name屬性進(jìn)行指定元素。
        絕對XPath包含定位的所有元素,這些元素從根(HTML)到其結果可能會(huì )失敗,只有稍微調整到應用程序。通過(guò)找到附近的一個(gè)元素的id或name屬性(理想的父元素),你才可以根據之間的關(guān)系定位到你追蹤的元素。這是不太可能改變的,并且會(huì )使你的測試更加的健壯。例如參考下面這段源代碼:

[html] view plaincopy
  1. <html>  
  2.  <body>  
  3.   <form id="loginForm">  
  4.    <input name="username" type="text" />  
  5.    <input name="password" type="password" />  
  6.    <input name="continue" type="submit" value="Login" />  
  7.    <input name="continue" type="button" value="Clear" />  
  8.   </form>  
  9. </body>  
  10. <html>  
        這個(gè)表單form元素可能通過(guò)如下方法被定位:
[python] view plaincopy
  1. login_form = driver.find_element_by_xpath("/html/body/form[1]")  
  2. login_form = driver.find_element_by_xpath("http://form[1]")  
  3. login_form = driver.find_element_by_xpath("http://form[@id='loginForm']")  
        [1] 絕對路徑(如果HTML有稍微的改動(dòng),就會(huì )被破壞)
        [2] 在HTML中的第一個(gè)表單元素
        [3] 指定屬性名稱(chēng)為id且值為loginForm的表單元素
        定位username元素的方法如下:

[python] view plaincopy
  1. username = driver.find_element_by_xpath("http://form[input/@name='username']")  
  2. username = driver.find_element_by_xpath("http://form[@id='loginForm']/input[1]")  
  3. username = driver.find_element_by_xpath("http://input[@name='username']")  
        [1] 第一個(gè)form元素通過(guò)一個(gè)input子元素,name屬性和值為username實(shí)現
        [2] 通過(guò)id=loginForm值的form元素找到第一個(gè)input子元素
        [3] 屬性名為name且值為username的第一個(gè)input元素
         定位"Clear"按鈕元素的方法如下:

[python] view plaincopy
  1. clear_button = driver.find_element_by_xpath("http://input[@name='continue'][@type='button']")  
  2. clear_button = driver.find_element_by_xpath("http://form[@id='loginForm']/input[4]")  
        [1] 屬性名為name其值為continue和屬性名為type其值為button的Input控件
        [2] 屬性id=loginForm的form元素的第四個(gè)input子元素
        上面這些例子涉及一些基礎知識,更多詳情請參考下面的建議:

        這里也有幾個(gè)非常實(shí)用的附加組件,可以幫助發(fā)現元素的XPath:
  • XPath Checker - suggests XPath and can be used to test XPath results.
  • Firebug - XPath suggestions are just one of the many powerful features of this very useful add-on.
  • XPath Helper - for Google Chrome

4 Locating Hyperlinks By Link Text


        當你知道一個(gè)錨標記內使用鏈接文本就使用該方法。通過(guò)這個(gè)策略,第一個(gè)匹配這個(gè)link text值的元素將被返回。如果沒(méi)有元素匹配這個(gè)鏈接文本,將拋出一個(gè)NoSuchElementException異常。示例的源代碼如下:
[html] view plaincopy
  1. <html>  
  2.  <body>  
  3.   <p>Are you sure you want to do this?</p>  
  4.   <a href="continue.html">Continue</a>  
  5.   <a href="cancel.html">Cancel</a>  
  6. </body>  
  7. <html>  
        這個(gè)continue.html鏈接定位的方法如下,partial表示部分匹配:
[python] view plaincopy
  1. continue_link = driver.find_element_by_link_text('Continue')  
  2. continue_link = driver.find_element_by_partial_link_text('Conti')  


5 Locating Elements By Tag Name


        當你想通過(guò)tag name(標記名)定位一個(gè)元素時(shí)可以使用該方法。同樣,第一個(gè)給出的tag name元素將被返回,如果沒(méi)有匹配的標記名,將拋出一個(gè)NoSuchElementException異常。示例的源代碼如下:
[html] view plaincopy
  1. <html>  
  2.  <body>  
  3.   <h1>Welcome</h1>  
  4.   <p>Site content goes here.</p>  
  5. </body>  
  6. <html>  
        定位heading(h1)元素的方法如下:
[python] view plaincopy
  1. heading1 = driver.find_element_by_tag_name('h1')  


6 Locating Elements By Class Name


        介紹類(lèi)似,用于通過(guò)類(lèi)屬性名(class attribute name)進(jìn)行定位一個(gè)元素。示例源代碼如下:
[html] view plaincopy
  1. <html>  
  2.  <body>  
  3.   <p class="content">Site content goes here.</p>  
  4. </body>  
  5. <html>  
        其中元素"p"的定位方法如下:
[python] view plaincopy
  1. content = driver.find_element_by_class_name('content')  


7 Locating Elements By CSS Selectors


        當你想要通過(guò)CSS選擇器語(yǔ)法定位一個(gè)元素時(shí),可以使用該方法。它將返回第一個(gè)與CSS選擇器匹配的元素,如果沒(méi)有匹配CSS選擇器的元素,將返回一個(gè)NoSuchElementException異常。實(shí)例源代碼如下所示:
[html] view plaincopy
  1. <html>  
  2.  <body>  
  3.   <p class="content">Site content goes here.</p>  
  4. </body>  
  5. <html>  
        其中元素"p"的定位方法如下:
[python] view plaincopy
  1. content = driver.find_element_by_css_selector('p.content')  
        Sauce實(shí)驗室有非常好的關(guān)于CSS選擇器的文檔:
           Sauce Labs has good documentation on CSS selectors.

      (By:Eastmount 2015-8-21 下午6點(diǎn)   http://blog.csdn.net/eastmount/
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Selenium基本用法
【selenium學(xué)習筆記】webdriver進(jìn)行頁(yè)面元素定位
Selenium2+python自動(dòng)化44
談?wù)勁老x(chóng)中定位元素的常見(jiàn)方法
【python】用selenium webdriver做簡(jiǎn)單的表格提交
史上最全!Selenium元素定位的30種方式
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久