V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
black11black
V2EX  ›  问与答

Selenium 如何处理 Basic Auth 的输入框的问题?

  •  
  •   black11black · 2020-10-30 17:57:43 +08:00 · 824 次点击
    这是一个创建于 1513 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,目前有一个比较复杂的登录验证系统,简单来说分为两步,先经过一个比较正常的 web 登录验证( jwt 实现),验证成功后跳转到另外一个域下的网址,弹出一个 Basic Auth 验证。

    不论顺序,网页需要经过双重认证之后才能显示内容。

    用 Python3 + selenium 搞模拟的话遇到问题就是 Basic Auth 不知道怎么过。

    根据网上查找到的内容,只需要将网址改为https://用户名:密码 @www.baidu.com(假设网址是百度)就能自动通过验证而不用弹出框,实测无效。

    而后根据网上查找信息说,需要单独设置浏览器的 Preference 才能让上述方法有效,于是我添加了下面的代码

    from selenium import webdriver
    
    options = webdriver.ChromeOptions()
    options.add_experimental_option("prefs" , {'network.http.phishy-userpass-length':255})
    driver = webdriver.Chrome(options = options)
    driver.get("https://username:[email protected]")
    # ...
    

    结果仍然无效。

    有没有带佬看出来啥原因了

    3 条回复    2020-10-30 20:17:31 +08:00
    royzheng
        1
    royzheng  
       2020-10-30 20:11:18 +08:00 via iPhone
    请在 http headet 里添加 basic auth 信息,具体你用 chrome basic auth 后访问那些页面看头部
    elfive
        2
    elfive  
       2020-10-30 20:14:28 +08:00 via iPhone
    加一个请求头:
    WWW-Authenticate: Basic {(username:password)的 Base64 编码值}

    https://tools.ietf.org/html/rfc7235
    elfive
        3
    elfive  
       2020-10-30 20:17:31 +08:00 via iPhone
    @elfive #2 写错了,请求头的 key 应该是 Authorization
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2750 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:19 · PVG 22:19 · LAX 06:19 · JFK 09:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.