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中文网其他相关文章!