等待隐藏元素与硒一起出现 python

Waiting for hidden element to appear with selenium python

为了说明上下文,让我们以登录页面为例。

假设登录页面允许用户在输入用户名(请假设)后等待 1 分钟后才能输入密码。

因此,首先只有用户名字段会在页面上可见。然后 1 分钟后,密码将可见。但是当页面加载时,这两个字段都存在于 HTML 中,并且字段 ID 在隐藏时和等待时间后可见时都不会更改。

因此,以下代码给出了第二次操作(密码)的“元素不可交互”错误。

WebDriverWait(browser,10).until(EC.presence_of_element_located((By.ID, 'username'))).send_keys(usr)
WebDriverWait(browser,70).until(EC.presence_of_element_located((By.ID, 'password'))).send_keys(pwd)

如果我 运行 这段代码一次一行,同时手动等待密码字段加载到页面上,那么代码就可以工作。等待时间是60秒我已经计时了。

但是我运行所有的东西都放在一个文件里,然后它几乎在 2 秒内给出了一个元素不可交互的错误。可能是因为 until 立即找到元素 ID,即使它隐藏在 UI 中,但存在于 HTML 中。

我们如何处理这种延迟?

您应该将 presence_of_element_located 更改为 visibility_of_element_located

WebDriverWait(browser,100).until(EC.visibility_of_element_located((By.ID, 'username'))).send_keys(usr)
WebDriverWait(browser,100).until(EC.visibility_of_element_located((By.ID, 'password'))).send_keys(pwd)

应该可以。
有几个 ExpectedConditions。
从它们的名称可以看出,presence_of_element_located 正在等待 presence 与传递的定位器匹配的元素,而 visibility_of_element_located 将等待 visibility[=26] =] 该元素。
通常,您应该始终使用 visibility_of_element_located,因为此方法正在等待元素变得可见和可交互,而 presence_of_element_located 将 return 元素仍未完全呈现等