21

通过该代码,我从 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 。

有任何想法吗 ?(使用硒)

4

3 回答 3

48

这似乎对我有用,而且代码更少:

var element = driver.FindElement(By.ClassName("sa_wr"));
var innerHtml = element.GetAttribute("innerHTML");
于 2014-02-24T12:19:18.440 回答
11

先找到元素,然后使用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);
}
于 2013-05-31T22:30:51.940 回答
0

我从SQA-SO找到了解决方案

IWebDriver driver;
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
js.ExecuteScript("document.getElementById("title").innerHTML = "New text!";");
于 2020-08-22T20:18:34.877 回答