使用Phantomjs模拟登录QQ空间

在使用Python进行数据爬取的过程中,我们一般使用Selenuim自动化测试工具对需要进行登录验证和动态JS数据的站点进行爬取。而与Selenuim相对应的浏览器组件,为了方便起见,一般使用FireFox或Chrome。

网上有一些关于模拟登录QQ空间的方法,都是使用Selenuim+Firefox或其他浏览器,例如郑晓的这篇:http://www.zh30.com/python-selenium-qzone-login.html

但Firefox或Chrome的内存占用极大,调用也会耗费一定的时间,有时候在机器性能有限的情况下,一旦访问量频繁,则会影响爬虫效率。

幸而,我们还可以使用Phantomjs这个基于 WebKit 的服务器端 JavaScript API无头浏览器来进行模拟登录:

代码如下:

from selenuim import webdriver
# 设置Phantonjs路径
driver = webdriver.Phantomjs(executable_path="D:\\phantomjs.exe")
login_url = 'https://h5.qzone.qq.com/mqzone/index'
driver.get(login_url)
time.sleep(3)
# 点击“继续打开触屏版”
driver.execute_script("var q=document.getElementById('guideSkip');q.click()")
driver.implicitly_wait(3)
# 填写登录信息
driver.find_element_by_id('u').clear()
driver.find_element_by_id('u').send_keys('QQ')
driver.find_element_by_id('p').clear()
driver.find_element_by_id('p').send_keys('密码')
# 登录
driver.execute_script("var login=document.getElementById('go');login.click();")
driver.implicitly_wait(3)
# 获取Cookie
cookie = driver.get_cookies()

最后,使用get_cookies()方法,获取QQ空间登录后的Cookie。因为在Phantomjs中,click()方法对于一些标签不是<button>、<a>的按钮无效,而QQ空间触屏版中的按钮大多数都不是<button>标签,例如”继续打开触屏版”为<b>标签,“登录”为<div>标签,所以在调用FireFox等浏览器中直接click()的方式不行,只得在driver中调用execute_script()方法,执行一段JS的点击事件,以进行跳转。

模拟登录成功之后,既可以继续在Phantomjs上直接进行数据爬取,也可以保存下Cookie,利用Cookie进行其他操作,就看个人取舍了。

原文发布于微信公众号 - 州的先生(zmister2016)

原文发表时间:2016-12-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏魂祭心

原 canvas绘制clock

3994
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

30710
来自专栏落花落雨不落叶

canvas画简单电路图

58111
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2612
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2878
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2496
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6568
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2102
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2667

扫码关注云+社区