Python Selenium在Div中找不到ID

Posted

技术标签:

【中文标题】Python Selenium在Div中找不到ID【英文标题】:Python Selenium Can not find ID inside Div 【发布时间】: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 中的站点截图和错误。我不确定是否出于安全原因,我尝试访问的网站不允许这种事情。

谢谢 乔尔

【问题讨论】:

你能添加你看到的错误吗? 对不起,我忘记了,我在第一篇文章中附上了错误。 【参考方案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)”。

以上是关于Python Selenium在Div中找不到ID的主要内容,如果未能解决你的问题,请参考以下文章

请教Python+selenium如何获取元素属性值问题

使用 Selenium 和 Python 和 Safari 查找 CVV

python selenium 模拟鼠标悬停,为啥看不到效果

在页面中找不到控件,但仅在通过 selenium-server 运行时

selenium 如何缩小范围后在定位元素比如缩小到某一个div,在定位

selenium+Python页面元素定位问题