上节介绍了浏览器的常用方法,涉及到了 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
- fromseleniumimport 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)
- forcookieName,cookieValuein 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 '请登录' indriver.page_source:#判断是否登陆为登陆页面
- forcookieinget_system_cookies(loginUrl,account,password):#如果登陆界面获取cookiedriver.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:
- assertverifyField =='圈子详情'
- 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()
通过结果显示我们没有操作操作登陆状态,直接进入了圈子详情到页面。
来源: http://www.cnblogs.com/mengyu/p/7078561.html