1. 程式人生 > >使用selenium webdriver從隱藏元素中獲取文字

使用selenium webdriver從隱藏元素中獲取文字

方法

由於webdriver spec的定義,Selenium WebDriver 只會與可見元素互動,所以獲取隱藏元素的文字總是會返回空字串。
可是,在某些情況下,我們需要獲取隱藏元素的文字。這些內容可以使用element.attribute('attributeName'), 通過textContent, innerText, innerHTML等屬性獲取。

  • innerHTML 會返回元素的內部 HTML, 包含所有的HTML標籤。
    例如,<div>Hello <p>World!</p></div>innerHTML會得到Hello <p>World!</p>
  • textContentinnerText 只會得到文字內容,而不會包含 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.