簡體   English   中英

Selenium Python - 從 Class 中提取文本

[英]Selenium Python - Extract Text from Class

我正在嘗試從下圖中的第二個“深” class 中提取文本。 在這種情況下,它將是“Sauvage”這個詞

要素

我做了以下事情:

search_perfumes = driver.find_elements(By.XPATH,'//span[@class="deep"][1]')
for perfumes in search_perfumes:
    list_perfumes.append(perfumes.text)

列表的長度正確顯示了 23 個元素(這是正確的,因為該頁面有 23 種香水),但列表有 23 個空元素。 我似乎無法提取“深” class 之后的文本。

關於我可能會出錯的地方的任何想法?

您正在嘗試從匹配//span[@class="deep"] XPath 的第二個web 元素中提取文本。
您可能錯過了等待,試圖在元素完全加載之前提取文本。 我不確定,因為您不共享所有代碼。
請試試這個:

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)

wait.until(EC.visibility_of_element_located((By.XPATH, '//span[@class="deep"]')))
search_perfumes = driver.find_elements(By.XPATH,'//span[@class="deep"]')
for perfumes in search_perfumes:
    list_perfumes.append(perfumes.text)

基於您分享的Html ,您可以使用 XPath 索引:

(//span[@class='deep'])[2] 

在代碼中:

print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "(//span[@class='deep'])[2]"))).text)

進口:

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

現在您必須確保[2]代表整個 HTML 中的Sauvage 您可以將索引[2]增加到或減少到任何其他匹配的數字。

你會怎么做? - 您需要確保我們在 HTMLDOM 中有一個唯一的匹配節點。 請參閱下面的詳細說明:

如果我們在HTML DOM中有唯一條目,請檢查dev tools (谷歌瀏覽器)。

檢查步驟:

Press F12 in Chrome -> go 到element部分 -> 執行CTRL + F -> 然后粘貼xpath並查看,如果您想要的element使用1/1匹配節點突出顯示

此外,您可以使用此 xpath //span[@class='deep']獲得 web 元素的列表

for ele in driver.find_elements(By.XPATH, "//span[@class='deep']"):
    print(ele.text)

更新:

您必須首先單擊位於影子根目錄中的Accept all cookie 按鈕:

代碼:

driver = webdriver.Chrome(driver_path)

driver.maximize_window()
wait = WebDriverWait(driver, 30)

driver.get("https://www.parfumdreams.pt/?m=5&search=sauvage")

try:
    time.sleep(2)
    cookie_btn = driver.execute_script('return document.querySelector("#usercentrics-root").shadowRoot.querySelector("#uc-center-container > div.sc-jJoQJp.dTzACB > div > div > div > button")')
    cookie_btn.click()
    print('Clicked')
except:
    print('Could not click')
    pass


print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "(//span[@class='deep'])[2]"))).text)

或者如果你想要所有這些,而不是上面的打印命令,使用下面的代碼:

for ele in driver.find_elements(By.XPATH, "//span[@class='deep']"):
    driver.execute_script("arguments[0].scrollIntoView(true);", ele)
    print(ele.text)

Output:

DIOR
Sauvage
DIOR
Sauvage
DIOR
Sauvage
DIOR
Sauvage
DIOR
Sauvage
DIOR
Sauvage
DIOR
Sauvage
DIOR
Eau Sauvage
DIOR
Eau Sauvage
DIOR
Eau Sauvage
DIOR
Eau Sauvage
DIOR
Eau Sauvage
DIOR
Eau Sauvage
DIOR
Eau Sauvage
DIOR
Eau Sauvage
DIOR
Eau Sauvage
DIOR
Eau Sauvage
DIOR
Eau Sauvage
Creed
Neroli Sauvage
DIOR
Eau Sauvage
DIOR
Lápis de lábios
DIOR
Lápis de lábios
Estée Lauder
Maquilhagem para lábios

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM