Selenium - 获取元素html而不是文本值

时间:2013-05-31 16:44:29

标签: c# html-parsing selenium-webdriver

通过该代码,我从html文档中提取了所有想要的文本

private void RunThroughSearch(string url)
{
    private IWebDriver driver;
    driver = new FirefoxDriver();
    INavigation nav = driver.Navigate();
    nav.GoToUrl(url);

    var div = driver.FindElement(By.Id("results"));
    var element = driver.FindElements(By.ClassName("sa_wr"));
}

虽然我需要优化提取文档的结果

Container
    HEADER -> Title of a given block
    Url -> Link to the relevant block
    text -> body of a given block
/Container

你可以在我的代码中看到我能够获得文本部分的值 作为一个文本值,这很好,但如果我想拥有 容器的值为 HTML ,而不是提取的文本?

<div class="container">
    <div class="Header"> Title...</div>
    <div class="Url"> www.example.co.il</div>
    <div class="ResConent"> bla.. </div>
</div>

因此容器在页面中大约是10次 我需要提取它的innerHtml。

任何想法? (使用Selenium)

3 个答案:

答案 0 :(得分:37)

这似乎对我有用,并且代码较少:

var element = driver.FindElement(By.ClassName("sa_wr"));
var innerHtml = element.GetAttribute("innerHTML");

答案 1 :(得分:9)

首先找到元素,然后使用IJavaScriptExecutor获取内部HTML。

var element = driver.FindElements(By.ClassName("sa_wr"));
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
if (js != null) {
    string innerHtml = (string)js.ExecuteScript("return arguments[0].innerHTML;", element);
}

答案 2 :(得分:0)

我从SQA-SO

找到了解决方案
IWebDriver driver;
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
js.ExecuteScript("document.getElementById("title").innerHTML = "New text!";");