Web搜索需要使用Javascript警报进行身份验证的内部站点

时间:2018-02-05 14:48:00

标签: javascript python selenium authentication beautifulsoup

我一直在尝试从内部公司站点获取一些原始XML数据(出于安全目的排除了url)。我目前正在使用selenium和beautifulsoup这样做(但我愿意接受任何其他选择)。手动访问该站点时,系统会提示您输入用户名和密码的javascript浏览器警报(参见图片)。我尝试自动验证凭据如下(不通过身份验证):

def main():
    #gets specified list of direct reports
    # username:password@
    url ="http://{username}:{password}@myURL.com"
    driver.get(url)
    html = driver.page_source
    soup = BeautifulSoup(html, "lxml")
    # parsing logic follows ... 

但是,当脚本运行时,我仍然需要在chromedriver控制的浏览窗口中手动输入用户名和密码,然后程序的其余部分按预期运行..

有没有办法避免手动输入?我也尝试过关于driver.alert和发送密钥的解决方案。浏览器的凭据无济于事。(我知道这可能很难,因为网站无法在网络外访问,任何见解都表示赞赏!)

编辑:我应该提到这种方法在几周前就已经开始工作了,但是在更新Chrome之后不再这样做了。

Authentication pop-up

1 个答案:

答案 0 :(得分:2)

您的登录过程可能会返回某种访问令牌,无论是响应正文中的值还是带有令牌的标头,可能是Authorization标头或Set-Cookie标头。

在大多数情况下,您需要使用每个请求发送该令牌,作为授权标头,正文参数或页面所需的任何内容。

您的工作是通过在进行身份验证时检查来自服务器的响应来查找该令牌,将其存储在某处,并在每次向服务器发出页面请求时将其发回。

如何将其发送回来取决于相关服务器的要求。它可能需要一个请求主体参数或标题,这两个最可能的情况。