Python Selenium 获取"li"文本



使用Python Selenium,我试图从li类中提取信息。以下是我尝试过的代码,但我得到了一个错误:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:
{"method":"xpath","selector":"//ul[@class='oas_columnsWrapper']//following::li[2]"}

我想打印:218543-Not Applicable+OA

下面是我尝试过的代码,但没有成功。

我该怎么修?

print(browser.find_element(By.XPATH,"//ul[@class='oas_columnsWrapper']//following::li[2]").Attribute("innerHTML"))

我的HTML代码:

<ul class="omniAds__oas_columnsWrapper">
<li class="omniAds__oas_columns">1.</li>
<li class="omniAds__oas_columns">218543-Not Applicable+OA</li>
<li class="omniAds__oas_columns"></li>
<li class="omniAds__oas_columns">23-11-2021</li>
<li class="omniAds__oas_columns">19,452</li>
<li class="omniAds__oas_columns">546</li>
<li class="omniAds__oas_columns">3%</li>
<li class="omniAds__oas_columns undefined"><b>RUNNING</b></li>
<div class="omniAds__oas_columns"><a href="/my99acres/all_responses/OA"><b>16 Responses</b></a></div>
<li class="omniAds__oas_columns omniAds__oas_viewReportBtn" id="oas_viewReportBtn0">View Report</li>
</ul>

Selenium Python中没有任何名为Attribute的方法。它是get_attribute

此外,您应该添加一些延迟

time.sleep(5)
second_li = browser.find_element(By.XPATH,"//ul[@class='omniAds__oas_columnsWrapper']//following::li[2]").get_attribute('innerText')
print(second_li)

建议(使用显式等待(

try:
second_li = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='omniAds__oas_columnsWrapper']//following::li[2]"))).get_attribute('innerText')
print(second_li)
except:
print("Could not get the text")
pass

您将不得不导入

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

您的XPath选择器不正确。它需要是omniAds__oas_columnsWrapper,而不仅仅是oas_columnsWrapper

此外,您不需要选择WebElement的属性来获取其文本。Selenium已经为WebElement提供了一个内置属性.text。但是,如果仍要使用属性,请使用.get_attribute()而不是attribute((。

另外,顺便说一句,我认为XPath可以简化一点。

最新更新