Webdriver & PhantomJS使用cookie免重複登錄

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登錄成功')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章