• python中用分别用selenium、requests库实现Windows认证登录


    最近在搞单位的项目,实现python自动化,结果在第一步就把我给拒之门外,查资料问大佬,问我们开发人员,从周一折腾到周五才搞定了

    接下给大家分享一下

    项目背景:我们系统是基于Windows平台实现的,登录方式为Windows身份认证

    一、web端登录方式,selenium模块实现

    1、原来想用selenium实现,web端可不可以用WinSpy先定位在使用pywin32实现呢,尝试一下发现,WinSpy这个工具根本定位不到我的登录窗口,整个黑色的定位框无法定位登录弹窗,网上说的Autoit这种方式估计和这个类似,都是操作Windows窗口,咱也不会,没研究明白,如图:

     2、中间还想过使用requests库请求,获取cookie(就是下面的第二中方法)的方式来实现,requests库发起请求,返回请求头中的Set-Cookie,利用Set-Cookie中的sessionid以及其他的必填参数来实现Windows身份认证,selenium中的webdriver发起请求时,将sessionid等一系列的参数带上,使用这种方法来实现Windows认证,可是还是不行,直接报错,说是无效的cookie域,具体报错信息如下:

    3、web这种方式更是奇葩,耗费了我一个半周的时间,咨询了我们的小简大佬、奔奔大佬依然还是没有搞定,这不是搞我心态嘛,自信心全部被摧毁,一遍一遍的翻阅着百度、必应等搜索网站,期间我的同学L姐一直陪伴着我,帮助我解决问题,包括执行的步骤,截图、录像都用上了,最后的最后终于是搞定了,接下来给大家说一下,以后有同学遇到Windows身份认证了,可以使用这种方式进行登录认证。

    其实很简单的原理,也看到过有帖子再说这种方法,就是将用户名和密码写到url中,可是当时我没有成功,关键在于特殊字符。

    语法为:http://username:password@url

    实现代码如下,举个栗子:

    from selenium import webdriver
    
    
    driver = webdriver.Chrome()
    url = r"http://d%5cyuaxxx:xxx123@10.2.xx.xx/"  # 用户名中含有特殊符号,这是转义后的用户名
    driver.get(url)

    这里千万注意,如果你的username,password里边含有特殊字符,如:!@#¥%……&*等等,一定要转换为UrlEncode格式,不然肯定登录不成功,一把血泪史呀

    在这里特别感谢我L姐,没有她我也解决不了这个问题

    提供一个转码的网址:https://tool.chinaz.com/tools/urlencode.aspx

    例如:“admin@1234”这个字符串,转码后为:

    二、采用python中的requests库实现Windows身份认证登录

    首先安装requests库,requests_ntlm库

    pip install requests
    pip install requests_ntlm

     Windows身份登录

    import requests
    from requests_ntlm import HttpNtlmAuth
    
    requests.get("http://xxx.com",auth=HttpNtlmAuth('domain\username','pwd'))

    举个例子:

    登录成功,并且可以得到header请求头,sessionid等等一些信息

     参考文章:https://www.cnblogs.com/xbzhu/p/7743584.html

  • 相关阅读:
    成为数据科学家并不难
    大数据分析的众包平台—Kaggle
    如何写一份好的数据分析报告
    配置java环境时,java的path地址放在其他地址的前面还是后面?
    js:随记
    JS:JSP Servlet
    [swustoj 1088] 德州扑克
    [swustoj 1092] 二分查找的最大次数
    [swustoj 371] 回文数
    [swustoj 1097] 2014
  • 原文地址:https://www.cnblogs.com/xingyunqiu/p/11865167.html
Copyright © 2020-2023  润新知