selenium - 在Selenium Webdriver,获取html源文件的webelement

我使用python来运行selenium webdriver。


from selenium import webdriver
wd = webdriver.Firefox()

我知道可以像这样抓取网络元素。


elem = wd.find_element_by_css_selector('#my-id')

得到完整的页面来源。

 
wd.page_source

 

但是,有没有方法找到"元素源代码"?


elem.source # <-- returns the HTML as a string

时间:

python :


element.get_attribute('innerHTML')

Java:


elem.getAttribute("innerHTML");

C#


element.GetAttribute("innerHTML");

真正没有获取webelement的html源代码的直接方法,你必须使用JS ,


 WebElement element = driver.findElement(By.id("foo"));
 String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element); 

可以在selenium python中使用下面的脚本获取所有的HTML源代码:


elem = driver.find_element_by_xpath("//*")
source_code = elem.get_attribute("outerHTML")

如果你想将其保存到文件:


f = open('c:/html_source_code.html', 'w')
f.write(source_code.encode('utf-8'))
f.close()

我建议保存到一个文件,因为源代码非常长。

实际上,使用属性方法更简单更直接。

使用 ruby 和 PageObject Gems,以获取与某个元素关联的类,该行将是 element.attribute(Class)

如果你想获得与元素绑定的其他属性,同样的概念也适用。 例如如果我想要元素的字符串,element.attribute(String)

在ruby中,使用selenium-webdriver (2.32.1 ),有一个包含整个页面源的page_source方法。

我希望这可以帮助你: http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html

描述了Java方法


java.lang.String getText() 

但不幸的是,在python中它不可用,

例如,


 my_id = elem[0].get_attribute('my-id')

在你的案例中,正确的方法是:


elem = wd.find_element_by_css_selector('#my-id')
html = wd.execute_script("return arguments[0].innerHTML;", elem)

或者


html = elem.get_attribute('innerHTML')

两者都为我工作(selenium—server—standalone—2.35.0 )


WebElement element = driver.findElement(By.id("foo"));
String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element); 

这段代码可以从源代码获得JavaScript!


innerHTML = sel.get_eval("window.document.getElementById('prodid').innerHTML")

javascript :


function logHtml(element, elementName)
{
 element.getOuterHtml().then(function(oh)
 {
 console.log(elementName + ':');
 console.log(oh);
 });
}

...