복붙노트

[PYTHON] Python + Selenium + PhantomJS에서 PDF로 렌더링

PYTHON

Python + Selenium + PhantomJS에서 PDF로 렌더링

PhantomJS가 Selenium과 Python과 함께 사용될 때 PDF 기능에 PhantomJS 렌더링을 사용할 수 있습니까? (즉, Selenium을 통해 Python 내에서 page.render ( 'file.pdf') 동작을 모방합니다.

나는 이것이 GhostDriver를 사용하고 GhostDriver가 실제로 인쇄 방법을 많이 지원하지 않는다는 것을 알고 있습니다.

Selenium이 아닌 또 다른 대안이 가능하다면, 나는 모두 귀입니다.

해결법

  1. ==============================

    1.GhostDriver 용 셀렌과 특수 명령을 사용하는 솔루션입니다. (GhostDriver 1.1.0 및 PhantomJS 1.9.6부터 작동해야 PhantomJS 1.9.8로 테스트 됨) :

    GhostDriver 용 셀렌과 특수 명령을 사용하는 솔루션입니다. (GhostDriver 1.1.0 및 PhantomJS 1.9.6부터 작동해야 PhantomJS 1.9.8로 테스트 됨) :

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """Download a webpage as a PDF."""
    
    
    from selenium import webdriver
    
    
    def download(driver, target_path):
        """Download the currently displayed page to target_path."""
        def execute(script, args):
            driver.execute('executePhantomScript',
                           {'script': script, 'args': args})
    
        # hack while the python interface lags
        driver.command_executor._commands['executePhantomScript'] = ('POST', '/session/$sessionId/phantom/execute')
        # set page format
        # inside the execution script, webpage is "this"
        page_format = 'this.paperSize = {format: "A4", orientation: "portrait" };'
        execute(page_format, [])
    
        # render current page
        render = '''this.render("{}")'''.format(target_path)
        execute(render, [])
    
    
    if __name__ == '__main__':
        driver = webdriver.PhantomJS('phantomjs')
        driver.get('http://stackoverflow.com')
        download(driver, "save_me.pdf")
    

    여기에 같은 질문에 대한 나의 대답을보십시오.

  2. ==============================

    2.selenium.selenium.capture_screenshot ( 'file.png')을 사용할 수는 있지만 pdf가 아닌 png로 스크린 샷을 줄 것입니다. 스크린 샷을 pdf로 가져 오는 방법이없는 것 같습니다.

    selenium.selenium.capture_screenshot ( 'file.png')을 사용할 수는 있지만 pdf가 아닌 png로 스크린 샷을 줄 것입니다. 스크린 샷을 pdf로 가져 오는 방법이없는 것 같습니다.

    다음은 capture_screenshot의 문서입니다. http://selenium.googlecode.com/git/docs/api/py/selenium/selenium.selenium.html?highlight=screenshot#selenium.selenium.selenium.capture_screenshot

  3. ==============================

    3.PDF 킷을 사용해 보시겠습니까? 그것은 HTML 페이지에서 PDF 파일을 렌더링 할 수 있습니다.

    PDF 킷을 사용해 보시겠습니까? 그것은 HTML 페이지에서 PDF 파일을 렌더링 할 수 있습니다.

  4. ==============================

    4.@rejected, 당신이 subprocesses를 사용하고 싶지 않다고 언급 한 것을 알고 있지만 ...

    @rejected, 당신이 subprocesses를 사용하고 싶지 않다고 언급 한 것을 알고 있지만 ...

    실제로 서브 프로세스 통신을 예상 한 것보다 많이 활용할 수 있습니다. 이론적으로, 당신은 Ariy의 stdin / stdout 예제를 취해 상대적으로 일반적인 wrapper 스크립트로 확장 할 수 있습니다. 먼저로드 할 페이지를 수락 한 다음 해당 페이지에서 테스트 액션을 수신 (& 실행) 할 수 있습니다. 결국, .render를 시작하거나 오류 처리를위한 일반적인 캡쳐를 만들 수 있습니다.

    try {
      // load page & execute stdin commands
    } catch (e) {
      page.render(page + '-error-state.pdf');
    }
    
  5. from https://stackoverflow.com/questions/16927090/python-selenium-phantomjs-render-to-pdf by cc-by-sa and MIT license