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