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

posted @ 2019-11-15 11:13  幸运球与倒霉蛋  阅读(1404)  评论(2编辑  收藏  举报