如何使用 Selenium 在嵌套 div 中定位输入元素

How to locate the input element within nested divs using Selenium

提问人:yummybagels 提问时间:8/7/2023 最后编辑:undetected Seleniumyummybagels 更新时间:8/8/2023 访问量:108

问:

我在定位元素时遇到问题,想将文本“hello”放入文本框中。<input class='search-text'...>

尝试找到输入 class='search-text'

我的网络驱动程序代码如下

driver.find_element(By.XPATH, "//ul[@class='filter-panel']//li[@class='filter-selection']//filter-selector//div[@class=filter-component]//div//div[@class='search-box-wrapper']/input[@class='search-text']").send_keys("hello")

这导致:

Exception has occurred: NoSuchElementException
Message: no such element: Unable to locate element: {"method":"xpath","selector":"//ul[@class='filter-panel']//li[@class='filter-selection']//filter-selector//div[@class=filter-component]//div//div[@class='search-box-wrapper']/input[@class='search-text']"}

我希望“你好”这个词能放在搜索中......箱。

“搜索...”输入框的 HTML 快照:

I'm trying to locate the Search... input box

有人有什么想法吗?谢谢!

python selenium-webdriver xpath css-selectors webdriverwait

评论

1赞 Mike 'Pomax' Kamermans 8/7/2023
请阅读发布指南,该指南明确地以粗体和全部大写字母告诉您不要发布文本图像(包括不发布指向文本图像的链接)。将文本放在您的帖子中。另一方面:当你处理网页时,为什么要使用xpath?为什么不直接在加载的文档中运行 queryselect?
0赞 Community 8/7/2023
请编辑问题,将其限制为具有足够详细信息的特定问题,以确定适当的答案。

答:

0赞 undetected Selenium 8/8/2023 #1

给定 html:

html

所需的元素是动态元素。


溶液

理想情况下,要将字符序列发送到元素,您需要诱导 WebDriverWaitelement_to_be_clickable(),并且可以使用以下任一定位器策略

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.search-text[aria-label='Enter text for search by keyword']"))).send_keys("yummybagels")
    
  • 使用 XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='search-text' and @aria-label='Enter text for search by keyword']"))).send_keys("yummybagels")
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC