[Python爬蟲] Selenium實現自動登入163郵箱和Locating Elements介紹
前三篇文章介紹了安裝過程和通過Selenium實現訪問Firefox瀏覽器並自動搜尋"Eastmount"關鍵字及截圖的功能。而這篇文章主要簡單介紹如何實現自動登入163郵箱,同時繼續介紹Selenium+Python官網Locating Elements部分內容。
希望該篇基礎性文章對你有所幫助,如果有錯誤或不足之處,請海涵~
[Python爬蟲] 在Windows下安裝PhantomJS和CasperJS及入門介紹(上)
[Python爬蟲] 在Windows下安裝PIP+Phantomjs+Selenium
[Python爬蟲] Selenium自動訪問Firefox和Chrome並實現搜尋截圖
注意:好像訪問瀏覽器在C盤會自動生成檔案越來越小,但可以清理,不知道為啥?
PS:第一次上傳翻譯博文,如果有錯誤還請見諒!
官網地址:http://selenium-python.readthedocs.org/locating-elements.html
這裡有各種策略用於定位網頁中的元素(locate elements),你可以選擇最適合的方案,Selenium提供了一下方法來定義一個頁面中的元素:
[2] 在HTML中的第一個表單元素
[3] 指定屬性名稱為id且值為loginForm的表單元素
定位username元素的方法如下:
[2] 通過id=loginForm值的form元素找到第一個input子元素
[3] 屬性名為name且值為username的第一個input元素
定位"Clear"按鈕元素的方法如下:
[2] 屬性id=loginForm的form元素的第四個input子元素
上面這些例子涉及一些基礎知識,更多詳情請參考下面的建議:
當你知道一個錨標記內使用連結文字就使用該方法。通過這個策略,第一個匹配這個link text值的元素將被返回。如果沒有元素匹配這個連結文字,將丟擲一個NoSuchElementException異常。示例的原始碼如下:
當你想通過tag name(標記名)定位一個元素時可以使用該方法。同樣,第一個給出的tag name元素將被返回,如果沒有匹配的標記名,將丟擲一個NoSuchElementException異常。示例的原始碼如下:
當你想要通過CSS選擇器語法定位一個元素時,可以使用該方法。它將返回第一個與CSS選擇器匹配的元素,如果沒有匹配CSS選擇器的元素,將返回一個NoSuchElementException異常。例項原始碼如下所示:
Sauce Labs has good documentation on CSS selectors.
(By:Eastmount 2015-8-21 下午6點 http://blog.csdn.net/eastmount/)
希望該篇基礎性文章對你有所幫助,如果有錯誤或不足之處,請海涵~
[Python爬蟲] 在Windows下安裝PhantomJS和CasperJS及入門介紹(上)
[Python爬蟲] 在Windows下安裝PIP+Phantomjs+Selenium
[Python爬蟲] Selenium自動訪問Firefox和Chrome並實現搜尋截圖
注意:好像訪問瀏覽器在C盤會自動生成檔案越來越小,但可以清理,不知道為啥?
一. Selenium自動登入
程式碼如下所示:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
#模擬登陸163郵箱
driver = webdriver.Firefox()
driver.get("http://mail.163.com/")
#使用者名稱 密碼
elem_user = driver.find_element_by_name("username")
elem_user.send_keys("15201615157")
elem_pwd = driver.find_element_by_name("password")
elem_pwd.send_keys("********")
elem_pwd.send_keys(Keys.RETURN)
time.sleep(5)
assert "baidu" in driver.title
driver.close()
driver.quit()
執行結果如下圖所示,自動開啟Firefox瀏覽器並輸入使用者名稱和密碼實現郵箱登入。 程式碼非常簡單,其中的原理也很簡單:通過driver訪問Firefox瀏覽器及URL,同時find_element_by_name找到網頁HTML原始碼中對應的值並填充,最後呼叫Keys實現模擬操作鍵盤Keys.RETURN實現。該斷言結果是不存在的,主要是用於防止關閉瀏覽器。
同時輸入使用者名稱或密碼錯誤會提示,其實就是瀏覽器。
原理解釋
兩年前在學習C#網路程式設計時,我成寫過Winform自動訪問163郵箱的文章:
C# 網路程式設計之網頁自動登入 (一).使用WebBrower控制元件模仿登入
通過對比,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>
如下圖所示一目瞭然:
同時輸入使用者名稱或密碼錯誤會提示,其實就是瀏覽器。
原理解釋
兩年前在學習C#網路程式設計時,我成寫過Winform自動訪問163郵箱的文章:
C# 網路程式設計之網頁自動登入 (一).使用WebBrower控制元件模仿登入
通過對比,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>
如下圖所示一目瞭然:
這部分文章雖然簡單,但是作為基礎文章在合適不過了,同時通過webdriver的driver.find_element_by_name引出下面的基礎知識介紹,畢竟實踐例子才是學習Selenium的動力源泉。
同樣下面這段程式碼可實現自動登入CSDN,是不是可以通過它實現暴力破解密碼呢?
同樣下面這段程式碼可實現自動登入CSDN,是不是可以通過它實現暴力破解密碼呢?
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Firefox()
driver.get("https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn")
elem_user = driver.find_element_by_name("username")
elem_user.send_keys("Eastmount")
elem_pwd = driver.find_element_by_name("password")
elem_pwd.send_keys("********")
elem_pwd.send_keys(Keys.RETURN)
time.sleep(5)
assert "baidu" in driver.title
driver.close()
driver.quit()
二. Locating Elements介紹
PS:第一次上傳翻譯博文,如果有錯誤還請見諒!
官網地址:http://selenium-python.readthedocs.org/locating-elements.html
這裡有各種策略用於定位網頁中的元素(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
from selenium.webdriver.common.by import By
driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')
這些都是通過類可獲取的屬性:ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
1 Locating By Id
當你知道一個元素的id屬性時使用該功能。有了這個方法,用id屬性值匹配時第一個被定位的元素將被返回。如果沒有元素匹配id值,一個NoSuchElementException異常將會丟擲。例如,參考這個頁面原始碼:
<html>
<body>
<form id="loginForm">
<input name="username" type="text" />
<input name="password" type="password" />
<input name="continue" type="submit" value="Login" />
</form>
</body>
<html>
表單form元素可以被如下方式定位:login_form = driver.find_element_by_id('loginForm')
2 Locating By Name
當你知道一個元素的name屬性時使用該方法。通過該方法,第一個滿足name屬性值的元素將被匹配返回,如果沒有元素匹配,將丟擲一個NoSuchElementException異常。例如,參考下面原始碼:
<html>
<body>
<form id="loginForm">
<input name="username" type="text" />
<input name="password" type="password" />
<input name="continue" type="submit" value="Login" />
<input name="continue" type="button" value="Clear" />
</form>
</body>
<html>
定位username&password元素方法如下:username = driver.find_element_by_name('username')
password = driver.find_element_by_name('password')
在"Clear"按鈕之前會給出"Login"登入按鈕:continue = driver.find_element_by_name('continue')
3 Locating By XPath
XPath是用於定位XML文件中節點的語言。正如HTML可以是XML(XHTML)的一個實現,Selenium使用者可以利用這個強大的語言來跟蹤Web應用程式中的元素。XPath擴充套件已經超出(以及支援)了按照id或name屬性定位的簡單方法,並開發了各種新的可能,如定位頁面上的第三個核取方塊(checkbox)。
其中使用XPath的一個主要原因是:當你沒有一個合適的ID或Name屬性來定位你需要查詢的元素時,你可以使用XPath去定位這個絕對元素(不建議這樣),或者相對一個有id或name屬性的元素定位。XPath定位器也可以通過其他不止是id和name屬性進行指定元素。
絕對XPath包含定位的所有元素,這些元素從根(HTML)到其結果可能會失敗,只有稍微調整到應用程式。通過找到附近的一個元素的id或name屬性(理想的父元素),你才可以根據之間的關係定位到你追蹤的元素。這是不太可能改變的,並且會使你的測試更加的健壯。例如參考下面這段原始碼:
<html>
<body>
<form id="loginForm">
<input name="username" type="text" />
<input name="password" type="password" />
<input name="continue" type="submit" value="Login" />
<input name="continue" type="button" value="Clear" />
</form>
</body>
<html>
這個表單form元素可能通過如下方法被定位:login_form = driver.find_element_by_xpath("/html/body/form[1]")
login_form = driver.find_element_by_xpath("//form[1]")
login_form = driver.find_element_by_xpath("//form[@id='loginForm']")
[1] 絕對路徑(如果HTML有稍微的改動,就會被破壞)[2] 在HTML中的第一個表單元素
[3] 指定屬性名稱為id且值為loginForm的表單元素
定位username元素的方法如下:
username = driver.find_element_by_xpath("//form[input/@name='username']")
username = driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")
username = driver.find_element_by_xpath("//input[@name='username']")
[1] 第一個form元素通過一個input子元素,name屬性和值為username實現[2] 通過id=loginForm值的form元素找到第一個input子元素
[3] 屬性名為name且值為username的第一個input元素
定位"Clear"按鈕元素的方法如下:
clear_button = driver.find_element_by_xpath("//input[@name='continue'][@type='button']")
clear_button = driver.find_element_by_xpath("//form[@id='loginForm']/input[4]")
[1] 屬性名為name其值為continue和屬性名為type其值為button的Input控制元件[2] 屬性id=loginForm的form元素的第四個input子元素
上面這些例子涉及一些基礎知識,更多詳情請參考下面的建議:
- W3Schools XPath Tutorial
- W3C XPath Recommendation
- XPath Tutorial - with interactive examples.
- 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
當你知道一個錨標記內使用連結文字就使用該方法。通過這個策略,第一個匹配這個link text值的元素將被返回。如果沒有元素匹配這個連結文字,將丟擲一個NoSuchElementException異常。示例的原始碼如下:
<html>
<body>
<p>Are you sure you want to do this?</p>
<a href="continue.html">Continue</a>
<a href="cancel.html">Cancel</a>
</body>
<html>
這個continue.html連結定位的方法如下,partial表示部分匹配:continue_link = driver.find_element_by_link_text('Continue')
continue_link = driver.find_element_by_partial_link_text('Conti')
5 Locating Elements By Tag Name
當你想通過tag name(標記名)定位一個元素時可以使用該方法。同樣,第一個給出的tag name元素將被返回,如果沒有匹配的標記名,將丟擲一個NoSuchElementException異常。示例的原始碼如下:
<html>
<body>
<h1>Welcome</h1>
<p>Site content goes here.</p>
</body>
<html>
定位heading(h1)元素的方法如下:heading1 = driver.find_element_by_tag_name('h1')
6 Locating Elements By Class Name
介紹類似,用於通過類屬性名(class attribute name)進行定位一個元素。示例原始碼如下:
<html>
<body>
<p class="content">Site content goes here.</p>
</body>
<html>
其中元素"p"的定位方法如下:content = driver.find_element_by_class_name('content')
7 Locating Elements By CSS Selectors
當你想要通過CSS選擇器語法定位一個元素時,可以使用該方法。它將返回第一個與CSS選擇器匹配的元素,如果沒有匹配CSS選擇器的元素,將返回一個NoSuchElementException異常。例項原始碼如下所示:
<html>
<body>
<p class="content">Site content goes here.</p>
</body>
<html>
其中元素"p"的定位方法如下:content = driver.find_element_by_css_selector('p.content')
Sauce實驗室有非常好的關於CSS選擇器的文件:Sauce Labs has good documentation on CSS selectors.
(By:Eastmount 2015-8-21 下午6點 http://blog.csdn.net/eastmount/)
相關文章
- 怎麼登陸163郵箱?163的郵箱有哪些實用技巧?
- Selenium使用Cookie實現自動登入Cookie
- python實現selenium網路爬蟲Python爬蟲
- Python利用Selenium自動登入掘金Python
- win10郵件同步163郵箱的方法_win10郵件怎麼繫結163郵箱實現同步Win10
- Python爬蟲教程-01-爬蟲介紹Python爬蟲
- 為什麼商務人都申請163郵箱,163郵箱怎麼註冊登陸呢?
- 爬蟲實戰(二):Selenium 模擬登入並爬取資訊爬蟲
- Java實現網易企業163郵箱傳送郵件Java
- win10自帶郵箱無法登入QQ郵箱Win10
- python爬蟲(四)——selenium校園網自動填報Python爬蟲
- Python+selenium實現Drcom校園網自動檢測網路以及自動登入Python
- Python爬蟲教程-34-分散式爬蟲介紹Python爬蟲分散式
- Python爬蟲教程-30-Scrapy 爬蟲框架介紹Python爬蟲框架
- JAVA爬蟲使用Selenium自動翻頁Java爬蟲
- 使用Python爬蟲實現自動下載圖片Python爬蟲
- 網路爬蟲之抓取郵箱爬蟲
- 爬蟲介紹爬蟲
- 電子郵箱是qq郵箱嗎 電子郵箱和qq郵箱的區別聯絡介紹
- Python web自動化爬蟲-selenium/處理驗證碼/XpathPythonWeb爬蟲
- Python自動登入QQ的實現示例Python
- zabbix使用163郵箱報警
- Python爬蟲之路-selenium在爬蟲中的使用Python爬蟲
- Python爬蟲實戰之(五)| 模擬登入wechatPython爬蟲
- python+selenium實現自動搶票Python
- Selenium用法 - - 自動化測試介紹
- python爬蟲如何用session保持登入?Python爬蟲Session
- Python爬蟲基礎之seleniumPython爬蟲
- Java爬蟲入門(一)——專案介紹Java爬蟲
- Python+Selenium+phantomjs實現網頁模擬登入和截圖PythonJS網頁
- Python爬蟲的兩套解析方法和四種爬蟲實現Python爬蟲
- win10自帶的郵箱軟體無法同步網易163郵箱如何解決Win10
- 【0基礎學爬蟲】爬蟲基礎之自動化工具 Selenium 的使用爬蟲
- Laravel 實現使用者名稱 + 郵箱 + 手機號登入Laravel
- 用python實現selenium 自動化測試Python
- Python 爬蟲模擬登入方法彙總Python爬蟲
- 手機怎麼登入企業郵箱?手機登入郵箱有幾種方式?
- 爬蟲開發python工具包介紹 (2)爬蟲Python
- Python爬蟲教程-26-Selenium + PhantomJSPython爬蟲JS