【问题标题】:Selenium - Get elements html rather Text ValueSelenium - 获取元素 html 而不是文本值
【发布时间】:2013-05-27 13:25:18
【问题描述】:

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

有什么想法吗? (使用硒)

【问题讨论】:

    标签: c# html-parsing selenium-webdriver


    【解决方案1】:

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

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

    【讨论】:

    • 当我使用这个错误弹出说元素没有“GetAttribute”属性。帮忙?
    • 此解决方案比上述答案效果更好。谢谢
    • 更好的答案。如果您也需要,也可以使用 outerHTML。
    【解决方案2】:

    先找到元素,然后使用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);
    }
    

    【讨论】:

      【解决方案3】:

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

      IWebDriver driver;
      IJavaScriptExecutor js = driver as IJavaScriptExecutor;
      js.ExecuteScript("document.getElementById("title").innerHTML = "New text!";");
      

      【讨论】:

        猜你喜欢
        • 2020-10-31
        • 2012-09-01
        • 1970-01-01
        • 2022-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-21
        相关资源
        最近更新 更多