使用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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索