2016-09-29 2 views
0

페이지의 모든 보이는 내용을 텍스트로 캡처하려고합니다. 예를 들어 that이라고 가정 해 보겠습니다.selenium webdriver를 사용하는 HTML 스냅 샷?

페이지 소스를 저장하면 javascript를 사용하여로드되었으므로 주석 섹션을 캡처하지 않습니다.

selenium webdriver에서 HTML 스냅 샷을 찍는 방법이 있습니까? 이 코드는 전체 페이지의 스크린 샷 걸릴 것

답변

2

JavaScript를 사용하여 페이지의 HTML을 생성했는지 여부에 관계없이 driver.page_source을 사용하여 캡처 할 수 있습니다.

예를 들어 iframe에 포함되어 있기 때문에 댓글 섹션의 소스를 캡처하지 못한 이유를 상상해보십시오. 프레임/iframe 내의 콘텐츠 용 HTML 소스를 캡처하려면 먼저 해당 프레임으로 포커스를 전환하고 driver.page_source을 호출해야합니다.

+0

과 같은 [here] (https://www.npmjs.com/package/html-snapshots)를 보았습니다. 팁을 주셔서 감사합니다. –

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 b64decodefrom wand.image import Image을 가져와야합니다.

+1

아마도 내 질문에 명확하지 않지만 이미지가 아닌 HTML을 캡처해야합니다. – LetsPlayYahtzee

+0

@LetsPlayYahtzee - 스냅 샷 사전 정의는 "일반적으로 소형 핸드 헬드 카메라로 찍은 비공식 사진"입니다. , 이미지가 아닌 HTML을 캡처해야 함을 반영하여 질문을 수정하십시오. –

+2

@Anil_M "사전"정의는 이것을 축구에서 기술적 인 장면으로 묘사합니다. 따라서 다른 용어로 용어를 사용하지 않을 수도 있기 때문에 사전 정의를 고집하지 마십시오. HTML 스냅 샷은 내가 요구하는 것에 사용되는 아주 정확한 용어이며, 나는 그것을 행사하지 않았다. 예를 들어 – LetsPlayYahtzee