getText()
無形文本,這意味著HTML源中存在的文本,但由於CSS造型或JavaScript操縱而不會在視覺上顯示出來,這對Selenium'stextContent
方法構成了重大挑戰。 此方法僅檢索元素的可見文本內容。 為了解決這個問題,您需要採用繞過視覺渲染並直接訪問基礎文本的策略。 一種主要方法是在硒內使用JavaScript執行。 通過注入JavaScript代碼,您可以直接訪問元素的innerText
>或
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() # Or your preferred browser driver.get("your_website_url") element = driver.find_element(By.ID, "myElement") # Replace with your element locator # Using JavaScriptExecutor to get the text content text = driver.execute_script("return arguments[0].textContent;", element) print(text) driver.quit()
execute_script
>此代碼代碼使用textContent
方法來運行JavaScript,檢索指定元素的WebDriverWait
明確等待可以防止在完全渲染頁面之前過早嘗試訪問文本。
>display: none;
>visibility: hidden;
>textContent
>如前所述,JavaScript執行是CSS或JavaScript隱藏的最強大的文本解決方案。 CSS可以使用innerText
,textContent
或通過將元素放置在屏幕外的元素隱藏文本。 JavaScript可以動態操縱文本可見性和內容。 JavaScript中的innerText
和textContent
屬性提供了一種訪問基礎文本的方法,無論這些操作如何。 但是,innerText
和
返回所有文本內容,包括隱藏子元素中的文本。 innerText
>通常僅返回用戶可見的文本,但其行為可以在瀏覽器中略有不同。
import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; WebDriver driver = new ChromeDriver(); driver.get("your_website_url"); WebElement element = driver.findElement(By.ID, "myElement"); JavascriptExecutor js = (JavascriptExecutor) driver; String text = (String) js.executeScript("return arguments[0].innerText;", element); System.out.println(text); driver.quit();
>"your_website_url"
"myElement"
textContent
> innerText
和getText()
。 始終根據您是否需要所有文本或僅視覺上呈現的文本來選擇最適合您需求的屬性(
getText()
廣泛討論,CSS或JavaScript可以呈現文本不可見,從而導致一個由getText()
WebDriverWait
getText()
如果元素駐留在框架或iframe內,則必須先切換到該框架,然後在嘗試訪問該元素及其文本及其文本之前先切換到該框架。 StaleElementReferenceException
並重試操作來處理此操作。 getText()
如果title
),請使用alt
>方法檢索屬性值。 getAttribute()
>getPageSource()
以上是Selenium獲取元素文本:如何處理不可見文本的問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!