Python Selenium - 弹出类似身份验证的警报

2024-01-12

嘿,Brilliant Stack Overflow 社区,

我遇到了一个关于处理警报的有趣场景,例如弹出的用户身份验证框。

1:使用的网站(练习网站):https://the-internet.herokuapp.com/ https://the-internet.herokuapp.com/

2: When I clicked in to Basic Auth, there was a alert like pop up window show up (see below). enter image description here

3:到目前为止我尝试过的。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions

chrome_path = '.\chromedriver.exe'
chrome_service = Service(chrome_path)
chrome = webdriver.Chrome(service=chrome_service)
chrome.maximize_window()
chrome.get('https://the-internet.herokuapp.com/')
basic_auth = WebDriverWait(chrome,timeout=30).until(expected_conditions.element_to_be_clickable((By.PARTIAL_LINK_TEXT,'Basic Auth')))
basic_auth.click()

3-1:将其视为警报(switch_to.alert)并使用发送键插入用户名和密码。但得到了 NoAlertPresentException。

chrome.switch_to.alert.send_keys('user\npass')
# get selenium.common.exceptions.NoAlertPresentException

3-2:将其视为活动元素并使用发送键。这次没有错误,但也没有任何内容发送到输入框。在我看来,这个弹出窗口不能成为一个元素。

chrome.switch_to.active_element.send_keys('user\npass')
# No error msg, but nothing show up in the pop up input field too. 

3-3:将其视为一个新窗口,但在检查有多少个活动窗口(driver.window_handles)时,只有一个窗口。所以这个弹出窗口也不是一个窗口。

print(len(chrome.window_handles)) # return 1, so the pop up is not a window too

3-4:我偶然发现了这篇文章,但我不确定我是否理解解决方案是什么。Python Selenium 警报身份验证问题 https://stackoverflow.com/questions/42542603/python-selenium-alert-authentication-trouble

如果有人能帮助我了解如何浏览像这样的非网络元素,我将非常高兴。

太感谢了!

=======

问题更新

非常感谢@Tyzeron 和@Nic Laforge 的帮助!

我尝试了帖子中提到的两种方法,想知道我是否做得正确?

仅供参考:该网站本身是一个练习网站,因此每次您输入用户名和密码然后登录时,该网站都会生成一个新的基本身份验证弹出窗口。很难说我尝试的方法是否有效。

方法一:使用get方法时,将Basic Authentication放在URL中。

chrome_path = '.\chromedriver.exe'
chrome_service = Service(chrome_path)
chrome = webdriver.Chrome(service=chrome_service)
chrome.maximize_window()
chrome.get('https://username:[email protected] /cdn-cgi/l/email-protection/basic_auth')

方法2:使用Selenium Wire(我不确定我的代码是否正确)

from seleniumwire import webdriver as wire_driver
import base64

def request_interceptor(req):
# add Authentication Here. 
# VXNlck5hbWU6UHNkMTIz is the base64 encoded str for "UserName:Psd123"
    req.headers['Authorization'] = 'Basic VXNlck5hbWU6UHNkMTIz=='
    print(req.headers)

chrome_path = '.\chromedriver.exe'
chrome_service = Service(chrome_path)
chrome = wire_driver.Chrome(service=chrome_service)
chrome.maximize_window()
chrome.request_interceptor = request_interceptor
chrome.get('https://the-internet.herokuapp.com/basic_auth')

使用 selenium-wire 的第二种方法也没有生成错误,但页面上没有可见的线索表明成功与否。

In addition, the printed result for req object in the function looks as follow: enter image description here

现在,这两种方法都没有生成错误不可见的线索来表明代码成功。所以我想知道如何判断它是否有效?


无法“找到”元素的原因

警报框不是 HTML 元素。它不是网页的一部分,因此您无法在 HTML 代码中看到它。警告框是浏览器的一部分。

一些背景

您所看到的是一个示例基本访问认证 https://en.wikipedia.org/wiki/Basic_access_authentication。正如 wiki 所说,通常会发生的情况是您的应用程序/浏览器通过标头字段自动提供用户名和密码(Authorization标头)在请求中。在这种情况下,您的浏览器尚不知道用户名和密码,因此它会通过浏览器的警报框询问用户名和密码。

我提出的解决方案

我相信使用 selenium 进行身份验证的最干净、最简单的方法是在 get 方法期间提供凭据,如下所示:

chrome.get('http://username:password@domain')

在你的具体情况下,这将是http://admin:[email protected] /cdn-cgi/l/email-protection/basic_auth.

然而,正如 @Nic-Laforge 提到的,这个解决方案取决于浏览器支持它的事实。 (截至撰写本文时,最新的 Chrome 支持它)

其他 StackOverflow 帖子中的解决方案

与我提出的解决方案不同,这两个解决方案中提出的解决方案类似的 StackOverflow 帖子 https://stackoverflow.com/a/67804038/9182765需要额外的库。

@Evander 先生提出的第一个解决方案是使用pynput模拟键盘输入的库。该解决方案要求用户使用非无头浏览器,让浏览器聚焦,并且在输入期间不与键盘交互。

第二个解决方案要好得多。如上所述,基本访问认证 https://en.wikipedia.org/wiki/Basic_access_authentication期望您的凭据Authorization请求中的标头。 @Evander 先生所做的是使用selenium-wire库来拦截 selenium 的请求并添加带有凭据的标头。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python Selenium - 弹出类似身份验证的警报 的相关文章

  • 稀有对象的 python 类型注释,例如 psycopg2 对象

    我了解内置类型 但是我如何指定稀有对象 例如数据库连接对象 def get connection and cursor gt tuple psycopg2 extensions cursor psycopg2 extensions conn
  • 在Python中从大文件中搜索单词列表

    我是新蟒蛇 我有一个单词列表和一个非常大的文件 我想删除文件中包含单词列表中的单词的行 单词列表按排序给出 并且可以在初始化期间输入 我正在努力寻找解决这个问题的最佳方法 我现在正在进行线性搜索 这花费了太多时间 有什么建议么 您可以使用i
  • 使用 Django 将文件异步上传到 Amazon S3

    我使用此文件存储引擎在上传文件时将文件存储到 Amazon S3 http code welldev org django storages wiki Home http code welldev org django storages w
  • 使用python从gst管道抓取帧到opencv

    我在用着OpenCV http opencv org 和GStreamer0 10 我使用此管道通过自定义套接字通过 UDP 接收 MPEG ts 数据包sockfd由 python 提供并显示它xvimagesink 而且效果很好 以下命
  • 在 python pandas 中,如何保存“网格图”?

    我对 pandas 绘图工具很陌生 在文档中 以下命令非常方便 myplot rts ret hist bins 50 by rts primary mic 然而 当我尝试从图中获取图形参考并保存它时 问题就出现了 myfigure myp
  • 类型错误:需要二进制或 unicode 字符串,得到 618.0

    I ve been trying to implement this ML Linear Model into my dataset https www tensorflow org tutorials estimator linear L
  • 根据其他单元格值更改多个单元格值

    我想更改包含的单元格moving to movingToOpenor movingToClose基于下一个单元格中给出的状态 有时循环会被中断并且不会从open to close or close to open 这是我当前的数据框 Dat
  • Spark 和 Python 使用自定义文件格式/生成器作为 RDD 的输入

    我想问一下 Spark 中输入的可能性 我可以看到从http spark apache org docs latest programming guide html http spark apache org docs latest pro
  • 从 Flask 运行 NPM 构建

    我有一个 React 前端 我想在与我的 python 后端 API 相同的源上提供服务 我正在尝试使用 Flask 来实现此目的 但我遇到了 Flask 找不到我的静态文件的问题 我的前端构建是用生成的npm run build in s
  • 如何查找或安装适用于 Python 的主题 tkinter ttk

    过去 3 个月我一直在制作一个机器人 仅用代码就可以完美运行 现在我的下一个目标是为它制作一个 GUI 但是我发现了一些障碍 主要的一个是能够看起来不像一个 30 年前的程序 我使用的是 Windows 7 我仅使用 Python 3 3
  • Ubuntu systemd 自定义服务因 python 脚本而失败

    希望获得有关 Ubuntu 中的 systemd 守护进程服务的一些帮助 我写了一个 python 脚本来禁用 Dell XPS 上的触摸屏 这更像是一个问题 而不是一个有用的功能 该脚本可以工作 但我不想一直启动它 这就是为什么我想到编写
  • 具有不同尺寸图像的 Tensorflow 输入数据集

    我正在尝试使用不同大小的输入图像来训练完全卷积神经网络 我可以通过循环训练图像并在每次迭代时创建单个 numpy 输入来做到这一点 即 for image input label in zip image data labels train
  • Python bug - 或者我的愚蠢 - 扫描字符串文字时 EOL

    我看不出以下两行之间有显着差异 然而第一个解析 而后者则不解析 In 5 n Axis of Awesome In 6 n Axis of Awesome File
  • 检测是否从psycopg2游标获取?

    假设我执行以下命令 insert into hello username values me 我跑起来就像 cursor fetchall 我收到以下错误 psycopg2 ProgrammingError no results to fe
  • 如何在亚马逊 EC2 上调试 python 网站?

    我是网络开发新手 这可能是一个愚蠢的问题 但我找不到可以帮助我的确切答案或教程 我工作的公司的网站 用 python django 构建 托管在亚马逊 EC2 上 我想知道从哪里开始调试这个生产站点并检查存储在那里的日志和数据库 我有帐户信
  • 如何将带有参数的Python装饰器实现为类?

    我正在尝试实现一个接受一些参数的装饰器 通常带有参数的装饰器被实现为双重嵌套闭包 如下所示 def mydecorator param1 param2 do something with params def wrapper fn def
  • pandas 中数据帧中的随机/洗牌行

    我目前正在尝试找到一种方法来按行随机化数据框中的项目 我在 pandas 中按列洗牌 排列找到了这个线程 在 pandas 中对 DataFrame 进行改组 排列 https stackoverflow com questions 157
  • 如何获取pandas中groupby对象中的组数?

    我想知道有多少个独特的组需要执行计算 给定一个名为 groupby 的对象dfgroup 我们如何找到组的数量 简单 快速 Pandaic ngroups 较新版本的 groupby API pandas gt 0 23 提供了此 未记录的
  • 将 Keras 集成到 SKLearn 管道?

    我有一个 sklearn 管道 对异构数据类型 布尔 分类 数字 文本 执行特征工程 并想尝试使用神经网络作为我的学习算法来拟合模型 我遇到了输入数据形状的一些问题 我想知道我想做的事情是否可能 或者我是否应该尝试不同的方法 我尝试了几种不
  • 无法安装最新版本的 Numpy (1.22.3)

    我正在尝试安装最新版本的 numpy 即 1 22 3 但看起来 pip 无法找到最后一个版本 我知道我可以从源代码本地安装它 但我想了解为什么我无法使用 pip 安装它 PS 我有最新版本的pip 22 0 4 ERROR Could n

随机推荐

  • 使用流将列表拆分为 n 大小的较小列表[重复]

    这个问题在这里已经有答案了 如何获取 Java 列表并将其拆分为较小的大小列表n在Java中使用流 在 JavaScript 中 我会使用reduce 函数并执行如下操作 const n 3 const sublists 1 2 3 4 5
  • 如何根据大小在表格行中显示图像

    有2x2网格 动态使用TableLayout 需要显示图像 现在基于图像大小 意味着 如果图像适合 1 个单元格意味着 1 个单元格 否则大意味着基于大小的 2 个单元格或 4 个单元格 我知道它将占用多少个单元格 我可以在 1 个单元格中
  • 为什么我收到错误没有这样的列?

    我有公司模型和模型 Invintaton 公司可以邀请其他公司进行消息传递 现在我需要只显示确认消息传递的公司 class Company lt ActiveRecord Base has many sent invitations cla
  • Lucene 查询语言和数值范围

    我应用以下 Lucene 查询谓词来获取 2 到 6 范围内的所有数字 value 2 TO 6 并接收具有以下值的文档 567986400000 567986400000 567986400000 536450400000 5364504
  • 使用 p 元素而不是 span 渲染 JSF h:message

    我想创建一个自定义消息渲染器来将 h message 渲染为 p html 元素而不是 span 元素 它涉及以下消息标签
  • Java:包不存在

    我在目录 E stuff Java gt 我创建了一个包A package pack public class A public void methodA System out println MethodA 为了编译 我使用了以下语句 j
  • 使纹理 LibGDX 居中

    我试图在 LibGDX 中将 256px X 256px 图像居中 当我运行我正在使用的代码时 它会在窗口的右上角渲染图像 对于我使用的相机的高度和宽度Gdx graphics getHeight and Gdx graphcis getW
  • UISearchBarStyleMinimal 在 UISearchBar 顶部显示范围按钮

    当我应用 UISearchBarStyleMinimal 时 我的范围按钮会绘制在搜索栏上 这是常规样式的样子 当我应用该样式时 我得到这样的结果 有谁知道为什么会发生这种情况 以及我能做些什么来解决它 当我删除范围按钮时 它看起来非常好
  • ModuleNotFoundError:尝试安装 dash 时没有名为“_brotli”的模块

    我尝试在 mac 操作系统上安装 dash 在 python 脚本上运行 import dash 时出现以下错误 Traceback most recent call last File app py line 16 in
  • “错误:没有匹配的函数可供调用”

    我正在使用键盘 并试图提高我使用 C 的技能 我以前从未使用过模板 所以我尝试研究如何使用它们 下面的代码是结果 不幸的是 它不起作用 我确实尝试寻找问题的解决方案 但由于我没有太多使用模板的经验 因此我无法在我的问题和其他问题之间建立任何
  • Firestore:从 id = x 的“子”集合中获取所有项目

    我正在使用 cloud firestore 作为后端数据库 因为我不太熟悉它 我对以下内容有点困惑 数据库设置 Messages collection gt itemId doc gt itemMessages collection gt
  • 在代码隐藏中更改文本框背景颜色

    我如何将代码隐藏中的文本框背景颜色更改为如下所示 Textbox1 BackColor F2F0E1 代替 Textbox1 BackColor System Drawing White 你可以尝试这样的事情 Textbox1 BackCo
  • 如何捕获引导日期选择器更改事件?

    现在我试图在用户更改日期后做一些事情 但好像我的ng change被忽略 这是我的代码示例
  • 通过 AddThis API 自动缩短电子邮件/Facebook 与 Bitly 共享的 URL

    使用 AddThis 中的内置 Bit ly 缩短服务时 我无法缩短 AddThis 电子邮件弹出窗口中显示的 URL 它适用于 Twitter 但不适用于 Facebook 和电子邮件 支持吗 var addthis share url
  • 删除特定字符之后的所有字符

    我有这样的话 Sams like costco Jecy penny like sears 在Java中 我想获取这个字符串并得到输出 Sams Jecy penny 有什么办法可以删除之后的所有字符 and 三个选项 Use indexO
  • 如何创建 RAR 压缩文件,压缩文件名中包含当前日期?

    我有文件夹D data有很多子文件夹和文件 我想用批处理文件将该文件夹存档到指定目录 并在存档文件名中添加当前日期 例如F 11 08 2016 data 到目前为止我的命令行是 C Program Files WinRAR rar exe
  • 在同一个表中回显具有相同列名的多个值

    我有 2 个表 一个用户表和一个交易表 看起来像 我现在的代码结构是 我面临的问题是我试图回显用户名 在一种情况下必须是接收者 而在另一种情况下必须是提供者 专家提示 Never use SELECT 除非您确切知道这样做的原因 否则在软件
  • Lambda 表达式 > 和 MethodInfo

    在将项目从VS2010迁移到VS2012时 我遇到了以下问题 该项目大量使用反射 为了从接口获取 MethodInfo 放置了以下代码 Expression
  • 在 DOCTYPE XSLT 2.0 Saxon9he 中插入 ENTITY 声明

    我的任务是将 XML 文档分解为单独的工作包 我遇到的唯一问题是在 DOCTYPE 中插入图形实体声明 如下所示 gt 不用介意实体名称中的扩展名 这就是他们在这里所做的 无论如何 实体将由所有 boardno可以在主 XML 文件中找到
  • Python Selenium - 弹出类似身份验证的警报

    嘿 Brilliant Stack Overflow 社区 我遇到了一个关于处理警报的有趣场景 例如弹出的用户身份验证框 1 使用的网站 练习网站 https the internet herokuapp com https the int