繁体   English   中英

如何使用 python selenium 按文本查找 div 元素?

[英]How to find div element by text with python selenium?

我必须找到这个文本和 select。 在此处输入图像描述

我试过了:

element = driver.find_element_by_xpath('//*[@id="product-detail-app"]/div/div[3]/div[1]/div[2]/div[3]/div[2]/div[3]').text
print(element)

但它给出了错误:

---------------------------------------------------------------------------
NoSuchElementException                    Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_11408/4199675862.py in <module>
      9 search_bar.send_keys(Keys.RETURN)
     10 result = driver.find_element_by_class_name("prdct-desc-cntnr-name").click()
---> 11 price = driver.find_element_by_xpath('//*[@id="product-detail-app"]/div/div[3]/div[1]/div[2]/div[3]/div[2]/div[3]')
     12 print(element)
     13 #for i in browser.find_elements_by_class_name("sp-itm"):

c:\users\seher\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py in find_element_by_xpath(self, xpath)
    392             element = driver.find_element_by_xpath('//div/td[1]')
    393         """
--> 394         return self.find_element(by=By.XPATH, value=xpath)
    395 
    396     def find_elements_by_xpath(self, xpath):

c:\users\seher\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py in find_element(self, by, value)
    976         return self.execute(Command.FIND_ELEMENT, {
    977             'using': by,
--> 978             'value': value})['value']
    979 
    980     def find_elements(self, by=By.ID, value=None):

c:\users\seher\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
    319         response = self.command_executor.execute(driver_command, params)
    320         if response:
--> 321             self.error_handler.check_response(response)
    322             response['value'] = self._unwrap_value(
    323                 response.get('value', None))

c:\users\seher\appdata\local\programs\python\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
    240                 alert_text = value['alert'].get('text')
    241             raise exception_class(message, screen, stacktrace, alert_text)
--> 242         raise exception_class(message, screen, stacktrace)
    243 
    244     def _value_or_default(self, obj, key, default):

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="product-detail-app"]/div/div[3]/div[1]/div[2]/div[3]/div[2]/div[3]"}
  (Session info: chrome=94.0.4606.71)

我尝试了不同的解决方案,但没有奏效。 这是一个可选的div 我必须找到我需要的文本并将其设置为可选。 但我找不到文字。 请帮助我,谢谢。

尝试在访问元素之前添加等待时间,如下所示:

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

wait = WebDriverWait(driver, 20)


value = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="product-detail-app"]/div/div[3]/div[1]/div[2]/div[3]/div[2]/div[3]'))).text
print(value)

您的 XPath 定位器看起来也很糟糕。 In 可能非常不可靠。
更新程序
该元素的更好的 XPath 定位器可以是//div[@class='variants']//div[text()='38']因此您的代码将是:

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

wait = WebDriverWait(driver, 20)


value = wait.until(EC.visibility_of_element_located((By.XPATH, "//div[@class='variants']//div[text()='38']"))).text
print(value)

更新程序
看来你必须切换到新的 window。
尝试这个:

new_window = driver.window_handles[-1]
driver.switch_to_window(new_window)

要返回第一个 window,您必须执行以下操作:

old_window = driver.window_handles[0]
driver.switch_to_window(old_window)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM