上節介紹了瀏覽器的常用方法,涉及到了cookie的使用,本節介紹一下如何利用cookie進行登陸系統,這里使用到了request模塊,我們首先利用request模塊,請求登陸地址進行登陸,登陸成功以后獲取cookie值,然后再通過add_cookie添加到瀏覽器,使系統處於登陸狀態。這里需要注意的是request請求返回的cookie的格式不能直接傳入add_cookie方法,所以這里需要進行轉換。
#這里需要注意區別,按住格式進行轉換 #request 請求返回cookie的格式 {'PHPSESSID': 'alvrh1i2h7joj2il2jn3sh7up1', 'uid': '16'} #selenium方法需要的cookie的格式 {'value': 'alvrh1i2h7joj2il2jn3sh7up1', 'httpOnly': False, 'domain': 'yingxiao.chewumi.com', 'name': 'PHPSESSID', 'secure': False, 'path': '/'}
下面看一下例子,來通過cookie登陸然后跳轉到圈子詳情頁面
#-*- 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()
通過結果顯示我們沒有操作操作登陸狀態,直接進入了圈子詳情到頁面。