首页 文章

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

提问于
浏览
350

我正在使用Python绑定来运行Selenium WebDriver .

from selenium import webdriver
wd = webdriver.Firefox()

我知道我可以 grab 这样的一个元素......

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

我知道我可以获得完整的页面来源...

wd.page_source

但无论如何要获得“元素来源”?

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

用于Python的selenium webdriver文档基本上不存在,我在代码中看不到任何似乎启用该功能的内容 .

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

13 回答

  • 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")
    
  • 0

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

  • 565

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

    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)

  • -1

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

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

    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();
    
  • 57

    Java与Selenium 2.53.0

    driver.getPageSource();
    
  • 0

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

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

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

  • 3

    我希望这可以提供帮助: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')
    
  • 0

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

    蟒蛇:

    element.get_attribute('innerHTML')
    

    Java的:

    elem.getAttribute("innerHTML");
    

    C#:

    element.GetAttribute("innerHTML");
    

    红宝石:

    element.attribute("innerHTML")
    

    JS:

    element.getAttribute('innerHTML');
    

    PHP:

    $elem.getAttribute('innerHTML');
    

    测试并使用 ChromeDriver .

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

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

  • 1

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

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

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

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

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

相关问题