使用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> 

现场示例: –

http://www.java2s.com/Tutorials/JavascriptDemo/f/find_out_the_difference_between_innerhtml_and_outerhtml_in_javascript_example.htm

下面你会发现不同的绑定需要的语法。 根据需要将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!