2013-08-05 5 views
6

मैं अजगर/phantomjs का उपयोग कर पाइथन में एचटीएमएल की पीएनजी फाइलें बनाने के लिए कर रहा हूँ। क्या HTML स्ट्रिंग या फ़ाइलहेडल (वेबसाइट की बजाय) से पीएनजी उत्पन्न करने का कोई तरीका है? मैंने सेलेनियम दस्तावेज़ों के माध्यम से खोज की है और googled लेकिन एक जवाब नहीं मिला। मेरे पास है:मैं एक स्ट्रिंग से एक पीएनजी फ़ाइल w/सेलेनियम/phantomjs कैसे उत्पन्न करूं?

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

आप 'फ़ाइल की कोशिश की है

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

या आप हो सकता है के साथ इस समस्या का समाधान हो? –

+0

यह मुझे एक खाली पीएनजी फ़ाइल भी देता है। क्या यह कहीं भी दस्तावेज है? –

+0

नहीं। मैंने कभी फ़ैंटॉमजेएस का उपयोग नहीं किया है, लेकिन फ़ाइल: /// वह ब्राउज़र है जो ब्राउज़र पर जाने के लिए उपयोग करती है। मैं ऊपर की रेखा से बच नहीं पाया (और अब मैं इसे संपादित नहीं कर सकता) ... क्या आप सुनिश्चित करते हैं कि इससे बच निकला? –

उत्तर

11

PhantomJS

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

यह कैसे phantomJS में एक स्क्रीनशॉट पाने के लिए है, मैं कुछ समय के लिए phantomJS का उपयोग किया है अब।

आप अधिक जानकारी के

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

आशा इस मदद करता है पा सकते हैं here.

सेलेनियम।

+0

आपको सेलेनियम (पायथन) सेक्शन से अपने अर्धविराम को हटा देना चाहिए। – man2xxl

+0

आपको नहीं करना है –

2

PhantomJS

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

आप का उपयोग page.content तो फिर तुम यह प्रस्तुत करना पृष्ठ की सामग्री 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

शुद्ध अच्छे पुराने अजगर का उपयोग कर सेट - सेट टी वह किसी भी खुले पृष्ठ पर आपके लक्षित एचटीएमएल पर सामग्री जेएस के माध्यम से सामग्री। अपने उदाहरण कोड ले रहा है:

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

ऐसा लगता है लाइनों

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

, समस्याग्रस्त हैं उत्पन्न फ़ाइल के रूप में खाली है। /// PathToFile/tmp.html`:

मैं जोड़ने के लिए एक

f.close() to your code 
संबंधित मुद्दे