我正在嘗試捕獲頁面的所有可見內容作爲文本。比方說,我們假設一個爲that。使用硒webdriver的HTML快照?
如果我存儲頁面源,那麼我不會捕獲評論部分,因爲它使用JavaScript加載。
有沒有辦法使用硒webdriver HTML快照?
我正在嘗試捕獲頁面的所有可見內容作爲文本。比方說,我們假設一個爲that。使用硒webdriver的HTML快照?
如果我存儲頁面源,那麼我不會捕獲評論部分,因爲它使用JavaScript加載。
有沒有辦法使用硒webdriver HTML快照?
無論頁面的HTML是否使用JavaScript生成,您仍然可以使用driver.page_source
捕獲它。
我想你之所以無法捕獲評論部分來源的原因是因爲它包含在iframe中 - 爲了捕獲frame/iframe中內容的html源代碼,你會需要先將焦點轉移到該特定幀,然後調用driver.page_source
。
此代碼將整個頁面的截圖(使用Python包裝最好表現):
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
來處理裁剪。
也許我的問題並不清楚,但我需要捕獲HTML,而不是圖像 – LetsPlayYahtzee
@LetsPlayYahtzee - 快照的詞典定義是「快速拍攝的非正式照片,通常使用小型手持照相機。」 ,請修改您的問題以反映您需要捕獲HTML而不是圖像。 –
@Anil_M「詞典」的定義也將其描述爲足球技術鏡頭。所以,讓我們不要堅持字典定義,因爲它們可能無法在另一個上下文中捕獲該術語的用法。 HTML快照是一個相當準確的術語,正在用於我所問的,我沒有事件。看看[這裏](https://www.npmjs.com/package/html-snapshots)例如 – LetsPlayYahtzee
感謝您的提示,編輯。 –