使用Python在Selenium WebDriver中获取WebElement的HTML源代码

这篇博客讨论了如何在Python的Selenium WebDriver中获取WebElement的HTML源代码。作者指出,虽然可以获取整个页面的源码,但直接获取元素源码的方法并不直观。社区成员分享了各种方法,包括使用JavaScript执行、属性方法以及不同的编程语言实现示例,如Java、Ruby和C#。
摘要由CSDN通过智能技术生成

我正在使用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的selenium webdriver文档基本上不存在,我在代码中看不到任何似乎启用该功能的内容。

有关访问元素(及其子元素)的HTML的最佳方法的任何想法?


#1楼

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

这段代码也可以从源代码中获取JavaScript!


#2楼

当然,我们可以在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()

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


#3楼

事实上,使用属性方法更容易,更直接。

将Ruby与Selenium和PageObject gems一起使用,以获取与某个元素相关联的类,该行将是element.attribute(Class)

如果您想要将其他属性绑定到元素,则应用相同的概念。 例如,如果我想要一个元素的String,就是element.attribute(String)


#4楼

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


#5楼

如果您对Python中的远程控制解决方案感兴趣,以下是如何获取innerHTML:

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

#6楼

看起来过时了,但无论如何都让它在这里。 在你的情况下正确的方法:

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)


#7楼

在PHPUnit selenium测试中,它是这样的:

$text = $this->byCssSelector('.some-class-nmae')->attribute('innerHTML');

#8楼

Java与Selenium 2.53.0

driver.getPageSource();

#9楼

InnerHTML将返回所选元素内的元素,outerHTML将与您选择的元素一起返回HTML内部

示例: - 现在假设您的元素如下所示

<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

蟒蛇:

element.get_attribute('innerHTML')

Java的:

elem.getAttribute("innerHTML");

如果您希望整页HTML使用以下代码: -

driver.getPageSource();

#10楼

获取我更喜欢的呈现HTML的方法如下:

driver.get("http://www.google.com")
body_html = driver.find_element_by_xpath("/html/body")
print body_html.text

但是,上述方法会删除所有标记(也就是嵌套标记),并仅返回文本内容。 如果您对获取HTML标记感兴趣,请使用以下方法。

print body_html.getAttribute("innerHTML")

#11楼

实际上并没有一种直接获取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); 

#12楼

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

这里描述了Java方法:

java.lang.String    getText() 

但不幸的是,它不适用于Python。 因此,您可以使用Java将方法名称转换为Python,并使用现有方法尝试另一种逻辑,而无需获取整个页面源...

例如

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

#13楼

您可以读取innerHTML属性以获取元素内容的来源或使用当前元素获取源的outerHTML

蟒蛇:

element.get_attribute('innerHTML')

Java的:

elem.getAttribute("innerHTML");

C#:

element.GetAttribute("innerHTML");

红宝石:

element.attribute("innerHTML")

JS:

element.getAttribute('innerHTML');

PHP:

$element->getAttribute('innerHTML');

经过测试并与ChromeDriver

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值