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