目前,qq郵箱的登陸方式有:html
一、利用帳號、密碼登陸web
二、快捷登陸,前提是你本地已有qq帳號登陸中cookie
和前面同樣,仍是先到qq郵箱登陸首頁,審查頁面元素,找到咱們進行登陸操做所相關的連接、按鈕或是輸入框。ide
QQ郵箱登陸首頁:https://mail.qq.com/ui
打開登陸頁,能夠看到兩種登陸方式選擇,以下圖:url
審查頁面元素,發現快速登陸方式,對應ID爲「qlogin_list「的一個div,而帳號、密碼登陸方式對應ID爲「web_login」的一個div,且這兩個div元素都位於ID爲「login_frame"的iframe的內嵌html中,以下:spa
對於快速登陸方式,若當前已有qq帳號在登陸中,在"qlogin_list"下會有一個<a>連接元素,不然沒有,所以經過對於該元素的判斷,能夠實現優先選擇快速登陸方式,直接點擊該連接便可。3d
對於帳號、密碼登陸,方法同博客園登陸同樣,找到用戶名、密碼的對應元素,實現填充後點擊登陸按鈕便可。code
登陸成功後,可經過browser對象的cookies屬性獲取當前cookie。Splinter有一個CookieManager對象,該對象爲dict類型,並持有添加、刪除cookie的方法,具體以下:htm
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