Splinter学习--初探3,两种方式登陆QQ邮箱

目前,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
qq_mail_login
相关文章
相关标签/搜索