• python selenium-webdriver 通过cookie登陆(十一)


    上节介绍了浏览器的常用方法,涉及到了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()

    通过结果显示我们没有操作操作登陆状态,直接进入了圈子详情到页面。

  • 相关阅读:
    JS控制文本框输入的内容
    JavaScript属性
    无缝滚动
    CCS实例,网页栏目
    CSS特效
    HTML技巧
    如何解决问题
    判断输入的字符是不是数字
    删除txt文件内容
    能组成几个单词
  • 原文地址:https://www.cnblogs.com/mengyu/p/7078561.html
Copyright © 2020-2023  润新知