【问题标题】:Python Selenium Can not find ID inside DivPython Selenium在Div中找不到ID
【发布时间】:2021-12-12 03:07:48
【问题描述】:

所以我正在尝试自动化我的日常工作以登录我的 ADP 网站,但似乎我从 selenium 中选择的任何功能都找不到我正在寻找的 ID,即“id="login-form_username ”。

下面是 Selenim Python 代码的一部分。

user_textbox=driver.find_element_by_id('login-form_username')
user_textbox.send_keys(user)
user_textbox.click()

user_confirm=driver.find_element_by_id("verifUseridBtn")
user_pass_textbox=driver.find_element_by_id("login-form_password")

user_signin=driver.find_element_by_id("signBtn")
user_signin.send_keys(Keys.RETURN)

还附上了我的 IDE 中的站点截图和错误。我不确定是否出于安全原因,我尝试访问的网站不允许这种事情。

谢谢 乔尔

【问题讨论】:

  • 你能添加你看到的错误吗?
  • 对不起,我忘记了,我在第一篇文章中附上了错误。

标签: python selenium pycharm


【解决方案1】:

由于您没有共享页面链接,而不是您看到的错误,我们只能猜测您的代码有什么问题。
所以它可以是:

  1. 您在访问该元素之前缺少等待/延迟。
    在这种情况下,这样的事情应该可以解决您的问题:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(executable_path='chromedriver.exe')

wait = WebDriverWait(driver, 20)
driver.get("https://your_site_url/")
user_textbox = wait.until(EC.visibility_of_element_located((By.ID, "login-form_username")))
user_textbox.send_keys(user)
user_textbox.click()

或者,您可以在定位元素之前简单地添加延迟,如下所示:

time.sleep(5)
user_textbox=driver.find_element_by_id('login-form_username')
user_textbox.send_keys(user)
user_textbox.click()

time.sleep(5)
user_confirm=driver.find_element_by_id("verifUseridBtn")
user_pass_textbox=driver.find_element_by_id("login-form_password")

time.sleep(5)
user_signin=driver.find_element_by_id("signBtn")
user_signin.send_keys(Keys.RETURN)

但这不是最好的方法。
2) 也许那里有一个 iframe。
在这种情况下,您必须切换到该 iframe。
3) 也许您没有将网络驱动程序设置为足够大的大小 - 如果是这样,请这样做。
4) 可能您必须将该输入元素滚动到视图中?

【讨论】:

  • 抱歉,我在之前的帖子中附上了错误。不确定 iframe,因为我在 html 行的某处看不到该标签。
  • 您是否尝试过我建议的明确等待的解决方案?或者,您可以简单地睡一觉。这不是太优雅,但可以提供帮助。
  • 是的,谢谢先知的建议。似乎以某种方式解决了第一个找不到“ID”的问题。但现在 send_keys 不再适用于 user_textbox 对象。 “回溯(最后一次调用):文件“C:/Users/joel/PycharmProjects/projtest/testing.py”,第 62 行,在 user_textbox.send_keys(user) AttributeError: 'bool' object has no attribute' send_keys'"
  • 看来你没有按照我的建议去做。你的 user_textbox 在某种程度上是一个布尔值,而它应该是一个硒网络元素对象
  • 我按照您的建议做了,但不确定为什么我的 var user_textbox 变成布尔值。另外,感谢您再次提出延迟的建议。我认为它现在解决了这个问题。我能够将我的论点传递给输入框。效果很好。再次感谢你。所以我只是在 driver.find_element 行之前和之后添加了一行“time.sleep(5)”。
猜你喜欢
  • 1970-01-01
  • 2022-01-21
  • 2019-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
相关资源
最近更新 更多