使用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可以简化一点。