Selenium利用cookie免登陸音悅台

發布時間:2018-08-20 20:53:15編輯:Run閱讀(4357)

    Cookie是浏覽器(User Agent)訪問一些網站後,這些網站存放在客戶端的一組數據,用于使網站等跟蹤用戶,實現用戶自定義功能

    利用Cookie可以實現免登陸


    本次實驗以:http://www.yinyuetai.com/ 音悅台為例


    打開目标網站,點擊登錄

    blob.png


    如何獲取Cookie信息,方法有很多,可以利用浏覽器手動登陸,在Network的Headers裡面找到Request Headers,裡面就有cookie信息,如下圖

    blob.png


    也可以利用抓包工具獲取,這裡就不多介紹,有興趣可自行百度

    Selenium也可以獲取cookie信息,不過需要利用selenium登陸一次


    利用Selenium登陸音悅台代碼如下:

    from selenium import webdriver
    import json
    import time
    
    
    class LoginYinYueTai(object):
        def __init__(self, url, phone_number, password):
            self.url = url
            self.phone_number = phone_number
            self.password = password
            self.browser = self.getbrowser()
            self.run(self.browser)
    
        def getbrowser(self):
            chrome_options = webdriver.ChromeOptions()
            # 把chrome設置成無界面模式,不論windows還是linux都可以,自動适配對應參數
            chrome_options.add_argument('headless')
            # 創建chrome無界面對象,設置成無頭
            browser = webdriver.Chrome(options=chrome_options,\
                                       executable_path=r'D:\chromedriver_2.41\chromedriver.exe')
            return browser
    
        def run(self, browser):
            # 打開目标網站
            browser.get(self.url)
            # 清楚之前的cookie信息
            browser.delete_all_cookies()
            # 等待js代碼加載
            browser.implicitly_wait(10)
            # 找到登陸按鈕,點擊登錄
            browser.find_element_by_xpath("//div[@class='login fr']\
            /a[@class='loginBtn J_login statisEle']").click()
            # 選中彈出框
            browser.current_window_handle
            # 找到輸入手機号的input标簽,模拟輸入手機号
            browser.find_element_by_xpath(
                "//form[@id='login-form']/div[@class='inter-content inter-content-login']\
                //input[@class='login-text-long']").send_keys(self.phone_number)
            # 找到輸入密碼的input标簽,這裡匹配上兩個标簽,所以用elements
            Elements = browser.find_elements_by_xpath("//form[@id='login-form']/div\
            /input[@class='login-text-long']")
            # 找到符合條件的是第二個,模拟輸入密碼
            Elements[1].send_keys(self.password)
            # 找到登錄按鈕,并模拟點擊登錄
            browser.find_element_by_xpath("//form[@id='login-form']//input[@class='login-submit']").click()
            # 設置延遲加載網站内容
            time.sleep(5)
            try:
                # 獲取登陸成功後的cookie信息
                login_rear_cookie = browser.get_cookies()
                if login_rear_cookie:
                    # 把cookie信息用json序列化後寫入cookie.txt文件
                    with open('cookie.txt', 'w') as f:
                        f.write(json.dumps(login_rear_cookie))
                    print('獲取cookie信息成功')
            except Exception as e:
                print('獲取cookie失敗:{}'.format(e))
            finally:
                # 關閉Chrome浏覽器
                browser.quit()
    
    
    if __name__ == '__main__':
        url = 'http://www.yinyuetai.com/'
        phone_number = '手機号'
        password = '密碼'
        st = LoginYinYueTai(phone_number=phone_number, password=password, url=url)


    運行程序,會生成一個cookie.txt文件, pycharm截圖如下,

    blob.png


    cookie.txt文件裡面存放的是cookie信息,如下:

    blob.png


    有了這個cookie.txt文件,就不需要每次都登陸了,下次使用selenium登陸的時候,帶上cookie信息,就直接是登陸成功狀态


    Selenium添加cookie,實現免登陸

    代碼如下:

    from selenium import webdriver
    import json
    import time
    
    
    chrome_options = webdriver.ChromeOptions()
    browser = webdriver.Chrome(options=chrome_options, 
                               executable_path=r'D:\chromedriver_2.41\chromedriver.exe')
    
    # 讀取登陸後的cookie.txt文件
    with open('cookie.txt', 'r', encoding='utf8') as f:
        login_rear_cookie_list = json.loads(f.read())
    
    # 清除cookie
    browser.delete_all_cookies()
    
    # 打開目标網站
    browser.get('http://www.yinyuetai.com')
    
    # 添加cookie
    for cookie in login_rear_cookie_list:
        browser.add_cookie(cookie)
    time.sleep(5)
    # 刷新頁面 可以看到已登陸狀态,已經成功登陸
    browser.refresh()
    time.sleep(10)
    browser.quit()


    運行代碼,可以看到用戶已登陸成功

    blob.png

關鍵字