Splinter學習--初探3,兩種方式登錄QQ郵箱


目前,qq郵箱的登錄方式有:

1、利用賬號、密碼登錄

2、快捷登錄,前提是你本地已有qq賬號登錄中

和前面一樣,還是先到qq郵箱登錄首頁,審查頁面元素,找到我們進行登錄操作所相關的鏈接、按鈕或是輸入框。

QQ郵箱登錄首頁:https://mail.qq.com/

打開登錄頁,可以看到兩種登錄方式選擇,如下圖:

   

審查頁面元素,發現快速登錄方式,對應ID為“qlogin_list“的一個div,而賬號、密碼登錄方式對應ID為“web_login”的一個div,且這兩個div元素都位於ID為“login_frame"的iframe的內嵌html中,如下:

對於快速登錄方式,若當前已有qq賬號在登錄中,在"qlogin_list"下會有一個<a>鏈接元素,否則沒有,因此通過對於該元素的判斷,可以實現優先選擇快速登錄方式,直接點擊該鏈接即可。

對於賬號、密碼登錄,方法同博客園登錄一樣,找到用戶名、密碼的對應元素,實現填充后點擊登錄按鈕即可。

登錄成功后,可通過browser對象的cookies屬性獲取當前cookie。Splinter有一個CookieManager對象,該對象為dict類型,並持有添加、刪除cookie的方法,具體如下:

cookie_manager.add({'name': 'Tony'})    # 增加一個cookie

cookie_manager.all()   # 獲取所有cookie

cookie_manager.delete()  # 刪除所有cookie
cookie_manager.delete('name', 'birthday','favorite_color')  # 刪除這三個cookie
cookie_manager.delete('name')  # 刪除一個cookie,cookie的名字為“name”

Splinter為Browser對象提供了get_iframe()方法,用於獲取iframe,可通過iframe相關的id,name, 或是index進行查找。

具體參考代碼如下:

 1 def qq_mail_login(username=None, password=None):  2     """
 3  模擬登錄QQ郵箱,賬號密碼登錄  4  :param username:  5  :param password:  6  :return:  7     """
 8 
 9     url = "https://mail.qq.com/"
10     browser = Browser() 11  browser.visit(url) 12     time.sleep(5) 13 
14     with browser.get_iframe("login_frame") as iframe: 15         '''
16  if username is None and password is None: 17  # 切換到"快速登錄" 18  div = iframe.find_by_id("qlogin_list").first 19  div.find_by_xpath("a")[0].click() 20  else: 21  # 利用賬號,密碼登錄 22  iframe.find_by_id("u").first.fill(username) 23  iframe.find_by_id("p").first.fill(password) 24  iframe.find_by_id("login_button").first.click() 25         '''
26         # 優先選擇"快速登錄"
27         div = iframe.find_by_id("qlogin_list").first 28         try: 29             quick_href = div.find_by_xpath("a") 30  quick_href.first.click() 31         except exceptions.ElementDoesNotExist, e: 32             print e.message 33             # 利用賬號,密碼登錄
34             iframe.find_by_id("u").first.fill(username) 35             iframe.find_by_id("p").first.fill(password) 36             iframe.find_by_id("login_button").first.click() 37         time.sleep(10) 38 
39     for k, v in browser.cookies.all().iteritems(): 40         print k, ":", v
qq_mail_login

 


免責聲明!

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



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