Chr*_* W. 434 python selenium automated-tests webdriver selenium-webdriver
我正在使用Python绑定来运行Selenium WebDriver.
from selenium import webdriver
wd = webdriver.Firefox()
Run Code Online (Sandbox Code Playgroud)
我知道我可以抓住这样的一个元素......
elem = wd.find_element_by_css_selector('#my-id')
Run Code Online (Sandbox Code Playgroud)
而且我知道我可以获得完整的页面来源...
wd.page_source
Run Code Online (Sandbox Code Playgroud)
但无论如何要获得"元素来源"?
elem.source # <-- returns the HTML as a string
Run Code Online (Sandbox Code Playgroud)
用于Python的selenium webdriver文档基本上不存在,我在代码中看不到任何似乎启用该功能的内容.
有关访问元素(及其子元素)的HTML的最佳方法的任何想法?
小智 689
您可以读取innerHTML
属性以获取元素内容的outerHTML
来源或使用当前元素获取源的来源.
蟒蛇:
element.get_attribute('innerHTML')
Run Code Online (Sandbox Code Playgroud)
Java的:
elem.getAttribute("innerHTML");
Run Code Online (Sandbox Code Playgroud)
C#:
element.GetAttribute("innerHTML");
Run Code Online (Sandbox Code Playgroud)
红宝石:
element.attribute("innerHTML")
Run Code Online (Sandbox Code Playgroud)
JS:
element.getAttribute('innerHTML');
Run Code Online (Sandbox Code Playgroud)
PHP:
$element->getAttribute('innerHTML');
Run Code Online (Sandbox Code Playgroud)
经过测试和使用ChromeDriver
.
nil*_*esh 88
实际上并没有一种直接获取webelement的html源代码的方法.你将不得不使用JS.我不太确定python绑定,但你可以在Java中轻松做到这一点.我确信JavascriptExecutor
在Python中必须有类似于类的东西.
WebElement element = driver.findElement(By.id("foo"));
String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element);
Run Code Online (Sandbox Code Playgroud)
Mar*_*ark 64
当然,我们可以在Selenium Python中使用以下脚本获取所有HTML源代码:
elem = driver.find_element_by_xpath("//*")
source_code = elem.get_attribute("outerHTML")
Run Code Online (Sandbox Code Playgroud)
如果要将其保存到文件:
f = open('c:/html_source_code.html', 'w')
f.write(source_code.encode('utf-8'))
f.close()
Run Code Online (Sandbox Code Playgroud)
我建议保存到文件,因为源代码非常长.
其他答案提供了有关检索WebElement标记的大量详细信息。然而,一个重要的方面是,现代网站越来越多地实现JavaScript、ReactJS、jQuery、Ajax、Vue.js、Ember.js、GWT等来渲染DOM 树中的动态元素。因此,在检索标记之前,有必要等待元素及其子元素完全渲染。
因此,理想情况下,您需要引发WebDriverWaitvisibility_of_element_located()
,并且可以使用以下任一定位器策略:
使用get_attribute("outerHTML")
:
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#my-id")))
print(element.get_attribute("outerHTML"))
Run Code Online (Sandbox Code Playgroud)
使用execute_script()
:
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#my-id")))
print(driver.execute_script("return arguments[0].outerHTML;", element))
Run Code Online (Sandbox Code Playgroud)
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
Run Code Online (Sandbox Code Playgroud)
实际上,使用属性方法更容易,更直接。
将Ruby与Selenium和PageObject宝石一起使用,以获取与某个元素关联的类,该行将为element.attribute(Class)
。
如果您想将其他属性绑定到元素,则适用相同的概念。例如,如果我想要元素的String element.attribute(String)
。
它看起来过时了,但无论如何让它在这里。在您的情况下执行此操作的正确方法:
elem = wd.find_element_by_css_selector('#my-id')
html = wd.execute_script("return arguments[0].innerHTML;", elem)
Run Code Online (Sandbox Code Playgroud)
或者
html = elem.get_attribute('innerHTML')
Run Code Online (Sandbox Code Playgroud)
两者都为我工作(selenium-server-standalone-2.35.0)。
归档时间: |
|
查看次数: |
384310 次 |
最近记录: |