我试图将所有页面的可见内容捕获为文本。我们假设that为例。
如果我存储页面源,那么我将不会捕获评论部分,因为它是使用javascript加载的。
有没有办法用selenium webdriver拍摄HTML快照? (最好用python包装器表示)
答案 0 :(得分:2)
无论页面的HTML是否是使用JavaScript生成的,您仍然可以使用driver.page_source
捕获它。
我想你之所以能够捕获示例中评论部分的来源是因为它包含在iframe中 - 为了捕获框架内内容的html源代码/ iframe您需要首先将焦点切换到该特定帧,然后调用driver.page_source
。
答案 1 :(得分:0)
此代码将截取整个页面的屏幕截图:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://dukescript.com/best/practices/2015/11/23/dynamic-templates.html')
driver.save_screenshot('screenshot.png')
driver.quit()
但是,如果您只想要特定元素的屏幕截图,可以使用:
def get_element_screenshot(element: WebElement) -> bytes:
driver = element._parent
ActionChains(driver).move_to_element(element).perform() # focus
src_base64 = driver.get_screenshot_as_base64()
scr_png = b64decode(src_base64)
scr_img = Image(blob=scr_png)
x = element.location["x"]
y = element.location["y"]
w = element.size["width"]
h = element.size["height"]
scr_img.crop(
left=math.floor(x),
top=math.floor(y),
width=math.ceil(w),
height=math.ceil(h))
return scr_img.make_blob()
WebElement是您追逐的元素。当然,此方法要求您导入from base64 import b64decode
和from wand.image import Image
来处理裁剪。