无法从 Web 浏览器警报弹出窗口中使用 Selenium 获取文本

Posted

技术标签:

【中文标题】无法从 Web 浏览器警报弹出窗口中使用 Selenium 获取文本【英文标题】:Can not get text with Selenium from web-browser alert pop-up 【发布时间】:2022-01-22 06:38:39 【问题描述】:

某些网站可能会通过弹出式警报向我提出不同的问题。

我可以用Selenium (python) 抓住它们。但无法看到他们的文字。 我试过了

an_alert_object = driver.switch_to.alert

an_alert_object = selenium.webdriver.common.alert.Alert(driver)

an_alert_object = WebDriverWait(driver,10).until(EC.alert_is_present())

我总是避免NoAlertPresentException

我可以的

an_alert_object.accept()

以任何方式。

但我永远无法得到an_alert_object.text,它总是空的。为什么? 我究竟做错了什么 ?如何获取警报文本(实际上是确认框)?

【问题讨论】:

Alert 类型应该有一个 getText() 方法...尝试使用 an_alert_object.getText(); (并且可能将其转换为 Alert 类型... Alert an_alert_object = ...) @pcalkins: .getTextJava bindings 中,.text 是 Python 的正确方法。 致 OP:向我们展示它的样子?可能通过截图或Weburl,你也可以检查confirmed box吗? .getText() 和 .get_text() 都导致 AttributeError: 'Alert' object has no attribute 'getText'/'get_text' python 没有它们 我很乐意检查这些警报(确认框),但我不知道如何。您希望通过屏幕截图看到什么? 【参考方案1】:

在尝试获取文本之前,您需要先切换到Alert

alert = driver.switch_to.alert()

最好将WebDriverWait诱导为alert_is_present(),提取文字如下:

alert = WebDriverWait(driver, 5).until(EC.alert_is_present())
time.sleep(3)
alert_text = alert.text

参考文献

您可以在以下位置找到一些相关的详细讨论:

How to read the text from the alert box using Python + Selenium

【讨论】:

当然,我做到了。我在第一个例子中提到过。 我刚刚尝试了an_alert_object = driver.switch_to.alert an_alert_object = WebDriverWait(driver,10).until(EC.alert_is_present()) print(an_alert_object.text) 并再次收到空警报文本。 @C4H7Cl2O4P 您可以根据答案更新在两者之间添加睡眠吗? 当我使用 (EC.alert_is_present) 而不是 (EC.alert_is_present() ) 我得到 , TypeError('__init__() 需要 1 个位置参数,但给出了 2 个参数') , @C4H7Cl2O4P 这是一个错字,已更正。

以上是关于无法从 Web 浏览器警报弹出窗口中使用 Selenium 获取文本的主要内容,如果未能解决你的问题,请参考以下文章

显示警报时从窗口警报中删除警报文本

谷歌浏览器不显示一个站点的警报()弹出窗口

如何检查是不是存在 SpringBoard 警报/Safari 浏览器弹出窗口?

如何使用 Selenium WebDriver 处理登录弹出窗口?

如何在运行 Selenium 脚本时禁用 chrome 浏览器中的身份验证弹出窗口

sele nium 模块