Selenium - 获取元素 html 而不是文本值
Posted
技术标签:
【中文标题】Selenium - 获取元素 html 而不是文本值【英文标题】:Selenium - Get elements html rather Text Value 【发布时间】: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 。
有什么想法吗? (使用硒)
【问题讨论】:
【参考方案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!";");
【讨论】:
以上是关于Selenium - 获取元素 html 而不是文本值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Selenium Webdriver捕获特定元素而不是整个页面的屏幕截图?
selenium-获取下拉选择框value默认的文本,而不是下拉框所有的文本值
使用 Selenium 和 Python 查找存在 data-tb-test-id 属性而不是 id 的元素