使用Phantomjs模拟登陆QQ空间

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

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

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

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

代码以下:服务器

from selenuim import webdriver微信

 

# 设置Phantonjs路径cookie

driver = webdriver.Phantomjs(executable_path="D:\\phantomjs.exe")ide

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)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索