Webdriver & PhantomJS使用cookie免重複登錄
最近在接手一個網絡爬蟲的任務,任務要求登錄到某管理系統後臺,並抓取數據。該後天相比傳統系統不同之處在於其後臺全部是由js實現響應,因此傳統的爬蟲技術束手就擒了,本文先介紹基於webdriver的模擬瀏覽器操作,以及藉助phantomjs完成js觸發。
直接上代碼:
#第一次登錄時,需要進行賬號密碼登錄
def login():
driver = webdriver.PhantomJS()
driver.get("此處爲登錄頁面")
# 輸入賬號密碼
driver.find_element_by_name("username").send_keys("C2WOGBEI")
driver.find_element_by_name("password").send_keys("mMkrBkz8Ke1a")
# 模擬點擊登錄
driver.find_element_by_xpath("//button[@id='button_login']").click()
# 等待3秒
time.sleep(3)
# 生成登錄後快照
# driver.save_screenshot("./wjn.png")
html = driver.page_source #獲得登錄後跳轉的頁面html
print('登錄成功')
# 保存當前登錄的cookie
dictCookies = driver.get_cookies()
jsonCookies = json.dumps(dictCookies)
# 登錄完成後,將cookie保存到本地文件
with open('./cookies.json', 'w') as f:
f.write(jsonCookies)
return driver
#第二次則直接將保存的cookie添加到driver裏實現免密登錄
def loginbycookie():
with open('./cookies.json', 'r', encoding='utf-8') as f:
listCookies = json.loads(f.read())
driver = webdriver.PhantomJS()
for cookie in listCookies:
driver.add_cookie({
'domain':'.xxx.com', # 此處爲cookie.json文件中的domain
'name': cookie['name'],
'value': cookie['value'],
'path': '/',
'expires': None
})
# 再次訪問頁面,便可實現免登陸訪問
driver.get('該網站的任意一個頁面')
print('cookie登錄成功')