javascript - Web 抓取需要使用/Javascript 警报进行身份验证的内部站点

标签 javascript python selenium authentication beautifulsoup

我一直在尝试从公司内部站点(出于安全目的排除 url)抓取一些原始 XML 数据。我目前正在使用 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 和向浏览器发送 key 和凭据的解决方案无济于事。(我知道这可能很困难,因为该站点无法在网络外部访问,任何见解都值得赞赏!)

编辑:我应该提一下这个方法在几个星期前是有效的,但是在 chrome 更新之后就不再有效了..

Authentication pop-up

最佳答案

您的登录过程可能会返回某种访问 token ,响应正文中的值或带有 token 的 header ,可能是 Authorization header 或 Set-Cookie header 。

在大多数情况下,您需要随每个 请求发送该 token ,作为授权 header 、正文参数或页面期望的任何内容。

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

如何将其发回取决于相关服务器的要求。它可能需要请求主体参数或 header ,这是最有可能的两种情况。

关于javascript - Web 抓取需要使用/Javascript 警报进行身份验证的内部站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48625138/

相关文章:

javascript - 在 Odoo Pos 收据上打印条形码

python - 覆盖一定百分比点的最小可能区域

python - 将 psycopg2 安装到 virtualenv 时出现 Gcc 错误(Lubuntu 12.04,python 2.7)

python - 如何在 pyinstaller 中包含 chromedriver?

java - 在 Selenium 测试中使用 XPath 通过文本获取 WebElement

python - 如果找不到 item 中的字母之一,我该如何循环它来执行 driver.refresh() 并重试?

javascript - jQuery 滚动 : detect end and start

JavaScript 对象丢失跨函数的引用

javascript - 无法在 AngularJS 中注入(inject) Ng-SweetAlert-2

python - 主要用于静态站点的轻量级 Web 框架