使用selenium webdriver從隱藏元素中獲取文字
阿新 • • 發佈:2019-02-13
方法
由於webdriver spec
的定義,Selenium WebDriver 只會與可見元素互動,所以獲取隱藏元素的文字總是會返回空字串。
可是,在某些情況下,我們需要獲取隱藏元素的文字。這些內容可以使用element.attribute('attributeName')
, 通過textContent
, innerText
, innerHTML
等屬性獲取。
innerHTML
會返回元素的內部 HTML, 包含所有的HTML標籤。
例如,<div>Hello <p>World!</p></div>
的innerHTML
會得到Hello <p>World!</p>
textContent
和innerText
只會得到文字內容,而不會包含 HTML 標籤。
textContent
是 W3C 相容的文字內容屬性,但是 IE 不支援innerText
不是 W3C DOM 的指定內容,FireFox不支援
示例
Ruby
require 'selenium-webdriver'
DEMO_PAGE = <<-eos
data:text/html,
<p>Demo page for how to get text from hidden elements using Selenium WebDriver .</p>
<div id='demo-div'>Demo div <p style='display:none'>with a hidden paragraph inside.</p><hr /><br /></div>
eos
driver = Selenium::WebDriver.for :phantomjs
driver.navigate.to(DEMO_PAGE)
demo_div = driver.find_element(:id, 'demo-div')
puts demo_div.attribute('innerHTML')
puts driver.execute_script("return arguments[0].innerHTML", demo_div)
puts demo_div.attribute('textContent')
puts driver.execute_script("return arguments[0].textContent", demo_div)
driver.quit
Csharp
using System;
using OpenQA.Selenium;
using OpenQA.Selenium.PhantomJS;
using OpenQA.Selenium.Support.Extensions;
namespace GetHiddenText {
internal class Program {
private const string DEMO_PAGE = @"data:text/html,
<p>Demo page for how to get text from hidden elements using Selenium WebDriver.</p>
<div id='demo-div'>Demo div <p style='display:none'>with a hidden paragraph inside.</p><hr /><br /></div>";
internal static void Main(string[] args) {
IWebDriver driver = new PhantomJSDriver();
driver.Navigate().GoToUrl(DEMO_PAGE);
IWebElement demoDiv = driver.FindElement(By.Id("demo-div"));
Console.WriteLine(demoDiv.GetAttribute("innerHTML"));
Console.WriteLine(driver.ExecuteJavaScript<string>("return arguments[0].innerHTML", demoDiv));
Console.WriteLine(demoDiv.GetAttribute("textContent"));
Console.WriteLine(driver.ExecuteJavaScript<string>("return arguments[0].textContent", demoDiv));
driver.Quit();
}
}
}
python
from selenium import webdriver
DEMO_PAGE = '''data:text/html,
<p>Demo page for how to get text from hidden elements using Selenium WebDriver.</p>
<div id='demo-div'>Demo div <p style='display:none'>with a hidden paragraph inside.</p><hr /><br /></div>'''
driver = webdriver.PhantomJS()
driver.get(DEMO_PAGE)
demo_div = driver.find_element_by_id("demo-div")
print demo_div.get_attribute('innerHTML')
print driver.execute_script("return arguments[0].innerHTML", demo_div)
print demo_div.get_attribute('textContent')
print driver.execute_script("return arguments[0].textContent", demo_div)
driver.quit
輸出
Demo div <p style="display:none">with a hidden paragraph inside.</p><hr><br>
Demo div <p style="display:none">with a hidden paragraph inside.</p><hr><br>
Demo div with a hidden paragraph inside.
Demo div with a hidden paragraph inside.