python selenium-webdriver 經過cookie登錄(十一)

上節介紹了瀏覽器的經常使用方法,涉及到了cookie的使用,本節介紹一下如何利用cookie進行登錄系統,這裏使用到了request模塊,咱們首先利用request模塊,請求登錄地址進行登錄,登錄成功之後獲取cookie值,而後再經過add_cookie添加到瀏覽器,使系統處於登錄狀態。這裏須要注意的是request請求返回的cookie的格式不能直接傳入add_cookie方法,因此這裏須要進行轉換。php

#這裏須要注意區別,按住格式進行轉換
#request 請求返回cookie的格式
{'PHPSESSID': 'alvrh1i2h7joj2il2jn3sh7up1', 'uid': '16'}

#selenium方法須要的cookie的格式
{'value': 'alvrh1i2h7joj2il2jn3sh7up1', 'httpOnly': False, 'domain': 'yingxiao.chewumi.com', 'name': 'PHPSESSID', 'secure': False, 'path': '/'}

下面看一下例子,來經過cookie登錄而後跳轉到圈子詳情頁面html

#-*- coding:utf-8 -*-
import time
import requests
from selenium import webdriver

def get_system_cookies(url,account,password):
    '''經過request 登錄系統,獲取cookie'''
    cookiesList = []
    data = {"username":account,"passwd":password}
    roomSession  = requests.Session()
    roomSession.post(url,data=data)
    loadCookies = requests.utils.dict_from_cookiejar(roomSession.cookies)
    for cookieName,cookieValue in loadCookies.items():
        cookies = {}
        cookies['name'] = cookieName
        cookies['value'] = cookieValue
        cookiesList.append(cookies)
    return cookiesList

def is_login_status_succeed(driver):
    '''判斷是否登錄狀態,非登錄狀態,經過cookie登錄'''
    loginUrl = 'http://yingxiao.chewumi.com/login.php'  #登錄地址
    account = 'account'  #帳號
    password = 'password'  #密碼
    driver.get('http://yingxiao.chewumi.com/index.php') #測試是否爲登錄狀態
    if '請登陸' in driver.page_source:  #判斷是否登錄爲登錄頁面
        for cookie in get_system_cookies(loginUrl,account,password): #若是登錄界面獲取cookie
            driver.add_cookie(cookie)  #添加cookie ,經過Cookie登錄
    return driver

def request_circle_details(driver,requestUrl):
    '''測試跳轉圈子詳情'''
    is_login_status_succeed(driver)
    driver.get(requestUrl)
    verifyField = driver.find_element_by_xpath('/html/body/div/div/div[2]/h1').text  #獲取頁面標題
    try:
        assert verifyField == '圈子詳情'
        return '測試經過'
    except AssertionError as e:
        return '測試未經過'


'''測試下效果'''
requestUrl = 'http://yingxiao.chewumi.com/list.php?page=1'
driver = webdriver.Chrome()
driver.maximize_window()
print (request_circle_details(driver,requestUrl))
driver.get(requestUrl)
time.sleep(2)
driver.quit()

經過結果顯示咱們沒有操做操做登錄狀態,直接進入了圈子詳情到頁面。web

相關文章
相關標籤/搜索