2013-08-05 2 views
6

Ich benutze Selen/Phantomjs, um Png-Dateien von HTML in Python zu erstellen. Gibt es eine Möglichkeit, das PNG aus einer HTML-Zeichenfolge oder einem Dateihandle (anstelle einer Website) zu generieren? Ich habe die Selen Docs durchsucht und gegoogelt, konnte aber keine Antwort finden. Ich habe:Wie erstelle ich eine PNG-Datei mit Selenium/Phantomjs aus einer Zeichenfolge?

htmlString = '<html><body><div style="background-color:red;height:500px;width:500px;">This is a png</div></body></html>' 
myFile = 'tmp.html' 
f = open(myFile,'w') 
f.write(htmlString) 

from selenium import webdriver 

driver = webdriver.PhantomJS() 
driver.set_window_size(1024, 768) 
#driver.get('https://google.com/') # this works fine 
driver.get(myFile) # passing the file name or htmlString doesn't work...creates a blank png with nothing 
driver.save_screenshot('screen.png') 
driver.quit() 

print "png file created" 
+0

Haben Sie versucht, 'Datei hinzufügen: /// PathToFile/tmp.html'? –

+0

Das gibt mir auch eine leere PNG-Datei. Ist das irgendwo dokumentiert? –

+0

Nein. Ich habe PhantomJS noch nie benutzt, aber die Datei: /// ist die, mit der Browser in eine Datei gehen. Ich bin der obigen Zeile nicht entkommen (und jetzt kann ich sie nicht bearbeiten) ... hast du sichergestellt, dass sie entkommen ist? –

Antwort

11

PhantomJS

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

Dies ist, wie man einen Screenshot in PhantomJS zu bekommen, habe ich nun schon seit einiger Zeit verwendet PhantomJS.

können Sie weitere Informationen here.

Selen

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

hoffe, das hilft finden.

+0

Sie sollten Ihre Semikola aus dem Selenium (Python) -Abschnitt entfernen. – man2xxl

+0

Sie müssen nicht –

2

PhantomJS

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

Sie setzen den Inhalt der Seite mit page.content Sie es 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(); 
     }); 
    }); 
}); 
4

Reine gute alte Python Dann machen - set t Er Inhalt auf jeder geöffneten Seite zu Ihrem Ziel html - durch JS. Unter Ihrem Beispielcode:

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" 
1

Es scheint, die Linien

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

problematisch sind, da die erzeugte Datei leer ist.

Ich reparierte dieses Problem mit

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

oder Sie könnten ein

f.close() to your code