2016-09-29 44 views
0

我正在嘗試捕獲頁面的所有可見內容作爲文本。比方說,我們假設一個爲that使用硒webdriver的HTML快照?

如果我存儲頁面源,那麼我不會捕獲評論部分,因爲它使用JavaScript加載。

有沒有辦法使用硒webdriver HTML快照?

回答

2

無論頁面的HTML是否使用JavaScript生成,您仍然可以使用driver.page_source捕獲它。

我想你之所以無法捕獲評論部分來源的原因是因爲它包含在iframe中 - 爲了捕獲frame/iframe中內容的html源代碼,你會需要先將焦點轉移到該特定幀,然後調用driver.page_source

+0

感謝您的提示,編輯。 –

0

此代碼將整個頁面的截圖(使用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 b64decodefrom wand.image import Image來處理裁剪。

+1

也許我的問題並不清楚,但我需要捕獲HTML,而不是圖像 – LetsPlayYahtzee

+0

@LetsPlayYahtzee - 快照的詞典定義是「快速拍攝的非正式照片,通常使用小型手持照相機。」 ,請修改您的問題以反映您需要捕獲HTML而不是圖像。 –

+2

@Anil_M「詞典」的定義也將其描述爲足球技術鏡頭。所以,讓我們不要堅持字典定義,因爲它們可能無法在另一個上下文中捕獲該術語的用法。 HTML快照是一個相當準確的術語,正在用於我所問的,我沒有事件。看看[這裏](https://www.npmjs.com/package/html-snapshots)例如 – LetsPlayYahtzee