我使用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的Selenium WebDriver文档基本上不存在,我在代码中没有看到任何支持该功能的东西。
访问一个元素(及其子元素)的HTML的最佳方法是什么?
其他答案提供了大量关于检索WebElement标记的细节。然而,一个重要的方面是,现代网站越来越多地实现JavaScript, ReactJS, jQuery, Ajax, Vue.js, Ember.js, GWT等来呈现DOM树中的动态元素。因此,在检索标记之前,有必要等待元素及其子元素完全呈现。
Python
因此,理想情况下,你需要为visibility_of_element_locate()诱导WebDriverWait,你可以使用以下定位器策略之一:
Using get_attribute("outerHTML"):
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#my-id")))
print(element.get_attribute("outerHTML"))
Using 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))
Note: You have to add the following imports:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC