目前,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

Splinter学习--初探3,两种方式登录QQ邮箱的更多相关文章

  1. Cocos2d-x学习笔记(五岁以下儿童) 精灵两种方式播放动画

     这几天在看控件类,临时没有想好实际运用的方向.单纯的创建网上已经有非常多这方面的样例,我就不写了.接下来是学习精灵类.精灵类若是单独学习也是非常easy.于是我加了一些有关动画方面的知识点与精灵 ...

  2. cmd窗口使用sftp命令非密钥和密钥登录SFTP服务器的两种方式

    cmd窗口使用sftp命令非密钥和密钥登录SFTP服务器的两种方式 一.在Windows环境下搭建SFTP服务器可参见http://www.cnblogs.com/Kevin00/p/6341295. ...

  3. Mac Item2 SSH免密登录Linux 服务器的两种方式

    转自http://blog.csdn.net/jobschen/article/details/52823980 mac ssh登录linux服务器 的两种方式: 个人推荐第二种,zsh方式,只需要把 ...

  4. 菜鸟学习Spring——SpringMVC注解版前台向后台传值的两种方式

    一.概述. 在很多企业的开法中常常用到SpringMVC+Spring+Hibernate(mybatis)这样的架构,SpringMVC相当于Struts是页面到Contorller直接的交互的框架 ...

  5. Django学习——ajax发送其他请求、上传文件(ajax和form两种方式)、ajax上传json格式、 Django内置序列化(了解)、分页器的使用

    1 ajax发送其他请求 1 写在form表单 submit和button会触发提交 <form action=""> </form> 注释 2 使用inp ...

  6. react学习笔记1之声明组件的两种方式

    //定义组件有两种方式,函数和类 function Welcome(props) { return <h1>Hello, {props.name}</h1>; } class ...

  7. 学习JavaWeb aop两种配置方式

    aop aop:面向切面编程,它可以解决重复代码. aop有两种方式: 一..xml方式 1.在springmvc-servlet.xml中配置aop,应用bean文件: <!--aop配置-- ...

  8. angular学习笔记(三)-视图绑定数据的两种方式

    绑定数据有两种方式: <!DOCTYPE html> <html ng-app> <head> <title>2.2显示文本</title> ...

  9. Linux内核设计第四周学习总结 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    陈巧然原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数A ...

随机推荐

  1. JAVA 多线程和并发学习笔记(四)

    1. 多进程 实现并发最直接的方式是在操作系统级别使用进程,进程是运行在它自己的地址空间内的自包容的程序.多任务操作系统可以通过周期性地将CPU从一个进程切换到另一个进程,来实现同时运行多个进程. 尽 ...

  2. onethink连接操作 sqlite 数据库

    直接上干货:一个简单的demo onthink本身已经有sqlite数据库的驱动 不需要在下载 common下面的config文件: 'SQLITE'=> array( 'DB_TYPE' =& ...

  3. python Django教程 之 安装、基本命令、视图与网站

    python  Django教程  之 安装.基本命令.视图与网站 一.简介 Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 w ...

  4. ios 自定义键盘

    由于项目需要,需要自定义键盘.ios系统键盘会缓存键盘输入,并保存在系统目录下的文件里,并且是明文存储,存在帐号密码泄漏风险.在别人代码基础上修改了下,美化了下界面,去掉了字符输入,加了点击特效,截图 ...

  5. 再谈vertical-align与line-height

    每次遇到多个inline-block元素排列的怪异垂直位置的问题的时候都可以通过经验,设置vertical-align来解决,没深入研究过,现在需要分析总结下这个问题. 问题引出 有小鲜肉新做了个页面 ...

  6. 《UNIX/Linux网络日志分析与流量监控》新书发布

    本书从UNIX/Linux系统的原始日志(Raw Log)采集与分析讲起,逐步深入到日志审计与计算机取证环节.书中提供了多个案例,每个案例都以一种生动的记事手法讲述了网络遭到入侵之后,管理人员开展系统 ...

  7. PgSQL dump 工具

    #!/bin/bash #Auther Sun Ying ##Copy left ##Version: Demo Version ##Basic Compare the datebase change ...

  8. python 去掉列表(list)中的所有空元素

    while '' in listExample: listExample.remove('')

  9. 团队项目建议 - 英语学习 App

    在这几年推广<构建之法>软件工程教学的过程中,我看到很多老师在讲软件工程的时候,虽然讲了很多年,但是手头没有任何项目,学生或者现想(得到一些大而无当,无法在一学期内完成一个可用版本的项目) ...

  10. Elasticsearch升级1.5版本暴露jdk的bug

    把测试环境的Elasticsearch升级到1.5.1版本,启动的时候报错: [root@node2 elasticsearch-1.5.1]# bin/service/elasticsearch s ...