How do I generate a png file w/ selenium/phantomjs from a string?

后端 未结 4 1320
感动是毒
感动是毒 2020-12-18 04:42

I am using selenium/phantomjs to create png files of html in python. Is there a way to generate the png from an html string or filehandle (instead of a website)? I\'ve searc

相关标签:
4条回答
  • 2020-12-18 05:22

    PhantomJS

    var page = require('webpage').create();
    page.open('http://github.com/', function () {
        page.render('github.png');
        phantom.exit();
    });
    

    This is how to get a screenshot in phantomJS, I've used phantomJS for some time now.

    You can find more information here.

    Selenium

    driver = webdriver.Chrome();
    driver.get('http://www.google.com');
    driver.save_screenshot('out.png');
    driver.quit();
    

    Hope this helps.

    0 讨论(0)
  • 2020-12-18 05:23

    It seems the lines

    f = open(myFile,'w')
    f.write(htmlString) 
    

    Are problematic, as the generated file is empty.

    I fixed this issue with

    with open(myFile,'wt') as f:
        f.write(htmlString)
    

    or you might have to add a

    f.close() to your code
    
    0 讨论(0)
  • 2020-12-18 05:33

    PhantomJS

    var page = require('webpage').create();
    page.content = '<html><body><p>Hello world</p></body></html>';
    page.render('name.png');
    

    You set the content of the page using page.content Then you render it using page.render

    Example using phantomjs-node

    phantom.create(function (ph) {
      ph.createPage(function (page) {
          page.set('viewportSize', {width:1440,height:900})
    
          //like this
          page.set('content', html);
    
          page.render(path_to_pdf, function() { 
            //now pdf is written to disk.
            ph.exit();
          });
      });
    });
    
    0 讨论(0)
  • 2020-12-18 05:39

    Pure good old python - set the content on any opened page to your target html - through JS. Taking your example code:

    from selenium import webdriver
    
    htmlString = '<html><body><div style="background-color:red;height:500px;width:500px;">This is a png</div></body></html>'
    
    driver = webdriver.PhantomJS() # the normal SE phantomjs binding
    driver.set_window_size(1024, 768)
    driver.get('https://google.com/') # whatever reachable url
    driver.execute_script("document.write('{}');".format(htmlString))  # changing the DOM
    
    driver.save_screenshot('screen.png')   #screen.png is a big red rectangle :)
    driver.quit()
    
    print "png file created"
    
    0 讨论(0)
提交回复
热议问题