[英]How to extract the text 121.6 from the text node within the span tag using Selenium and Python
對於 web 上的以下元素
<span title="點贊數14332" class="like"><!----><!----><!----><!----><!----><i class="van-icon-videodetails_like" style="color:;"></i>1.4萬
</span>
<span title="number" class="like">
<!---->
<!---->
<!---->
<!---->
<!---->
<i class="van-icon-videodetails_like" style="color:;"></i>
"121.6"
</span>
我想得到的是數字“121.6”。 我試過了,
likes = driver.find_elements_by_xpath('//span[@class="like"]')[0].text
它返回我“--”,沒有別的。
我還嘗試從檢查中復制 X 路徑,
likes = driver.find_elements_by_xpath('//*[@id="arc_toolbar_report"]/div[1]/span[1]/text()')
但是 selenium 返回我:
selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: The result of the xpath expression "//*[@id="arc_toolbar_report"]/div[1]/span[1]/text()" is: [object Text]. It should be an element.
我應該怎么做才能獲得數字“121.6”?
要提取視頻上的點贊數,即當前文本為1.5 萬,因為文本位於文本節點內,您需要為visibility_of_element_located()
和execute_script()
方法引入WebDriverWait ,您可以使用以下任一定位器策略:
使用XPATH
:
print(driver.execute_script('return arguments[0].lastChild.textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[@class='like' and starts-with(@title, '點贊數')][not(contains(.,'--'))]")))).strip())
使用CSS_SELECTOR
:
print(driver.execute_script('return arguments[0].lastChild.textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "span.like[title^='點贊數']")))).strip())
注意:您必須添加以下導入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
您可以在以下位置找到一些相關的討論:
我已經測試了您提供的 xpath 以及您與bilibili.com的鏈接,並且能夠獲得該視頻的點贊數。 正如DebanjanB 的回答中已經提到的,您將不得不使用WebDriverWait 。
您的代碼返回“--”,因為喜歡的數量仍在后台動態加載。 您將在下面找到一個等待“--”被實際數字替換的代碼片段
WebDriverWait(driver, 120).until(
EC.visibility_of_element_located((By.XPATH,'/html/body/div[3]/div/div[1]/div[3]/div[1]/span[1] \
[not(contains(text(),"--"))]')
))
likes = driver.find_element_by_xpath("/html/body/div[3]/div/div[1]/div[3]/div[1]/span[1]").text
print(likes)
返回 1.4 萬
這
[不(包含(文本(),“--”))]
基本上告訴驅動程序等到所選節點不包含'--'字符串。
編輯:
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
這些是您需要的進口商品。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.