【问题标题】:Selenium wait until user clicks the buttonSelenium 等到用户单击按钮
【发布时间】:2020-11-10 13:08:27
【问题描述】:

我必须使用户提供 OTP 并单击按钮的网站自动化。这部分无法自动化,因为 OTP 未知。所以我需要硒脚本等到用户点击按钮。 有什么办法可以做到这一点?(通过 selenium 而不是与用户交互)

试过这个:

from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait(driver, 1).until(lambda d: d.execute_script("return document.getElementById('loginbutton').clicked")=="true")

但是会抛出以下错误:

WebDriverWait(driver, 1).until(lambda d: d.execute_script("return document.getElementById('loginbutton').clicked")=="true") 文件“C:\Users\project\venv\lib\site-packages\selenium\webdriver\support\wait.py”,第 80 行,直到 引发 TimeoutException(消息、屏幕、堆栈跟踪) selenium.common.exceptions.TimeoutException:消息: 进程以退出代码 1 结束

document.getElementById('loginbutton').clicked

在开发人员工具上执行时给出未定义,这可能是导致上述错误的原因吗?

【问题讨论】:

  • .clicked 不是 dom 元素的方法或属性。
  • 如何判断按钮是否被点击?
  • 如果需要手动完成,我建议使用提示通知用户执行他们必须执行的操作,然后单击“完成”。提示关闭后,您可以恢复 Selenium 调用。
  • 只有使用 selenium 就没有其他方法了吗?

标签: python selenium


【解决方案1】:

这是一种“破解”该方法,但您可以只检查 URL,直到它更改以确认登录成功。

例如,当您尝试登录时,您的网址可能看起来像这样: https://www.yoururl.com/login

现在获取成功登录的网址:

https://www.yoururl.com/dashboard

现在您可以编写一个循环来获取当前 URL 并检查它,我将在下面列出两个可以使用的示例。您需要对其进行修改以适合您的具体情况。

您可以使用.current_url 方法来帮助您做到这一点。

while browser.current_url == 'https://www.yoururl.com/login':
    # still at the login page
    pass

print("Successful sign in!")

while browser.current_url != 'https://www.yoururl.com/dashboard':
    # still at the login page
    pass

print("Successful sign in!")

【讨论】:

    猜你喜欢
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 2013-12-24
    • 1970-01-01
    • 2019-02-06
    • 2013-05-07
    • 2021-05-04
    相关资源
    最近更新 更多