首页 > 解决方案 > 提取 div 文本时文本值为空

问题描述

我试图提取文本 "Quesadilla" ,但是当我尝试获取文本时它是空的。

试图从以下内容中提取的 HTML:

 <div data-baseweb="block" data-testid="menu-item-name" class="d0 bd ib ic id ie be ed f7 bh fz if">
      <div lines="2" class="ig ih ii bq">Quesadilla</div></div>    
 </div>

代码:

menuItemNames = driver.find_elements_by_xpath("//div[@data-testid='menu-item-name']")
for menuItemName in menuItemNames:
   print(menuItemName.text)

有一个更好的方法吗?当我使用上面的代码获取文本时,我得到了一些 div 的值,而另一些则返回空或 null

标签: pythonselenium

解决方案


尝试通过显式等待引入 CSS_SELECTOR 以获得更高的可靠性:

CSS 选择器:

div[data-testid='menu-item-name'] div 

带有显式等待的代码:

driver = webdriver.Chrome("C:\\Users\\etc\\Desktop\\Selenium+Python\\chromedriver.exe")
driver.maximize_window()
wait = WebDriverWait(driver, 30)
driver.get("Your URL")
ele = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[data-testid='menu-item-name'] div "))).text
print(ele)

如果此 div 中有 10 个元素,div[data-testid='menu-item-name']您可以正确尝试使用 css 选择器,如下所示:

elements = driver.find_elements(By.CSS_SELECTOR, "div[data-testid='menu-item-name']")
for ele in elements:
    print(ele.text)

在此处了解有关显式等待的更多信息


推荐阅读