使用Python在Selenium WebDriver中获取WebElement的HTML源代码
我正在使用Python绑定来运行Selenium WebDriver。
from selenium import webdriver wd = webdriver.Firefox() 我知道我可以像这样抓住一个webelement …
 elem = wd.find_element_by_css_selector('#my-id') 
而且我知道我可以得到整个页面的源代码…
 wd.page_source 
但无论如何要得到“元素来源”?
 elem.source # <-- returns the HTML as a string 
对于Python的seleniumwebdriver文档基本上是不存在的,我没有看到似乎启用该function的代码中的任何东西。
有关访问元素(及其子元素)的HTML的最佳方法的任何想法?
 您可以读取innerHTML属性,以获取当前元素的源元素或outerHTML 内容的源。 
python:
 element.get_attribute('innerHTML') 
Java的:
 elem.getAttribute("innerHTML"); 
C#:
 element.GetAttribute("innerHTML"); 
ruby:
 element.attribute("innerHTML") 
JS:
 element.getAttribute('innerHTML'); 
 经过testing,并与ChromeDriver 。 
 获取webelement的html源代码并不是一个简单的方法。 你将不得不使用JS。 我不太确定python绑定,但是你可以在Java中轻松完成。 我相信在Python中必须有类似JavascriptExecutor类的东西。 
  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() 
我build议保存到一个文件,因为源代码是非常长的。
 在Ruby中,使用selenium-webdriver(2.32.1),有一个page_source方法,它包含整个页面源代码。 
看起来已经过时了,但无论如何都要让它在这里。 正确的方法来做你的情况:
 elem = wd.find_element_by_css_selector('#my-id') html = wd.execute_script("return arguments[0].innerHTML;", elem) 
要么
 html = elem.get_attribute('innerHTML') 
两者都为我工作(selenium服务器独立-2.35.0)
实际上,使用属性方法更简单,更直接。
 使用Selenium和PageObject gem的Ruby,为了得到与某个元素相关联的类,该行将是element.attribute(Class) 。 
 如果您想要获取绑定到元素的其他属性,则适用相同的概念。 例如,如果我想要一个元素的string, element.attribute(String) 。 
与Selenium 2.53.0的Java
 driver.getPageSource(); 
我希望这可以帮助: http : //selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html
这里描述Java方法:
 java.lang.String getText() 
但不幸的是,它在Python中不可用。 因此,您可以将方法名称翻译为Python中的Python,并尝试使用当前方法的另一个逻辑,而无需获取整个页面源代码。
例如
  my_id = elem[0].get_attribute('my-id') 
在PHPUnitseleniumtesting中是这样的:
 $text = $this->byCssSelector('.some-class-nmae')->attribute('innerHTML'); 
如果你对Python中的远程控制解决scheme感兴趣,下面是如何获取innerHTML:
 innerHTML = sel.get_eval("window.document.getElementById('prodid').innerHTML") 
InnerHTML将返回选定元素内的元素,并且outerHTML将与HTML中一起返回您select的元素
例如: – 现在假设你的元素如下
 <tr id="myRow"><td>A</td><td>B</td></tr> 
innerHTML元素输出
 <td>A</td><td>B</td> 
outerHTML元素输出
 <tr id="myRow"><td>A</td><td>B</td></tr> 
现场示例: –
 下面你会发现不同的绑定需要的语法。 根据需要将innerHTML更改为outerHTML 。 
python:
 element.get_attribute('innerHTML') 
Java的:
 elem.getAttribute("innerHTML"); 
如果你想整个页面的HTML使用下面的代码: –
 driver.getPageSource(); 
 WebElement element = driver.findElement(By.id("foo")); String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element); 
这段代码真的可以从源代码获取JavaScript!