目前,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进行查找。

具体参考代码如下:

 def qq_mail_login(username=None, password=None):
"""
模拟登录QQ邮箱,账号密码登录
:param username:
:param password:
:return:
""" url = "https://mail.qq.com/"
browser = Browser()
browser.visit(url)
time.sleep(5) with browser.get_iframe("login_frame") as iframe:
'''
if username is None and password is None:
# 切换到"快速登录"
div = iframe.find_by_id("qlogin_list").first
div.find_by_xpath("a")[0].click()
else:
# 利用账号,密码登录
iframe.find_by_id("u").first.fill(username)
iframe.find_by_id("p").first.fill(password)
iframe.find_by_id("login_button").first.click()
'''
# 优先选择"快速登录"
div = iframe.find_by_id("qlogin_list").first
try:
quick_href = div.find_by_xpath("a")
quick_href.first.click()
except exceptions.ElementDoesNotExist, e:
print e.message
# 利用账号,密码登录
iframe.find_by_id("u").first.fill(username)
iframe.find_by_id("p").first.fill(password)
iframe.find_by_id("login_button").first.click()
time.sleep(10) for k, v in browser.cookies.all().iteritems():
print k, ":", v

qq_mail_login

最新文章

  1. Node.js、express、mongodb 实现分页查询、条件搜索
  2. cygwin下载指南(转)
  3. iOS应用之间调用
  4. 如何向MyEclipse项目的文件夹中添加JSP页面?
  5. iOS事件响应链
  6. flex经验记录(转载)
  7. hibernate加载实体映射文件 及映射文件auto-import
  8. 我对国内两大购书站点的感受(dearbook和china-pub)
  9. Python 学习笔记3
  10. Codeforces 29D Ant on the Tree 树的遍历 dfs序
  11. 回顾2017系列篇(一):最佳的11篇UI/UX设计文章
  12. MongoDB入门系列(四):权限管理
  13. P2947 [USACO09MAR]向右看齐Look Up--单调栈
  14. 案例学Python--案例四:Django实现一个网站的雏形(2)
  15. 最简单的css实现页面宽度自适应
  16. Samsung_tiny4412(驱动笔记10)----mdev,bus,device,driver,platform
  17. 第五周 加分题-mybash的实现
  18. JS+Zero Clipboard swf复制到剪贴板 兼容浏览器(bind事件绑定函数)
  19. JAVA基础之——序列化和反序列化
  20. C# 调用C++DLL 类型转换

热门文章

  1. Linux压缩打包命令
  2. sql参数化查询in的参数
  3. 【Python】pip国内安装源
  4. html尖角提示框的实现
  5. sql prompt 安装使用教程
  6. WeedFS依赖库 0.6.1
  7. IOS学习之路--OC的基础知识
  8. 删除win7远程桌面历史记录
  9. typeahead.js 使用记录
  10. LINUX退出当前进程——比较return、exit()