州的先生

在Python中使用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无头浏览器来进行模拟登录:

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

最后,使用get_cookies()方法,获取QQ空间登录后的Cookie。

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


州的先生 Zmister.com 版权所有丨转载请邮件联系授权后注明转自:http://zmister.com/archives/14.html
点赞
  1. WolfLC说道:

    请问有用cookie登录空间的讲解吗,空间现在登录都需要做安全验证了

    1. zmister说道:

      麻烦一点的就手动登录之后用那个cookies加到请求头里面

  2. Loner说道:

    warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
    Selenium貌似不支持PhantomJS了

  3. Loner说道:

    warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
    Selenium貌似不支持PhantomJS了

    1. zmister说道:

      嗯,新版本的selenium似乎已经放弃对PhantomJS的支持了,不过是用其他浏览器也是一样的。或者使用低版本的selenium

发表评论

电子邮件地址不会被公开。