我正在使用selenium / phantomjs在python中创建html的png文件。有没有办法从html字符串或文件句柄(而不是网站)生成png?我搜索了selenium文档并用谷歌搜索但找不到答案。我有:
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 :(得分:12)
<强> PhantomJS 强>
var page = require('webpage').create();
page.open('http://github.com/', function () {
page.render('github.png');
phantom.exit();
});
这是如何在phantomJS中获取截图,我已经使用了phantomJS一段时间了。
您可以找到更多信息here.
Selenium
driver = webdriver.Chrome();
driver.get('http://www.google.com');
driver.save_screenshot('out.png');
driver.quit();
希望这有帮助。
答案 1 :(得分:4)
Pure good old python - 通过JS将任何打开页面上的内容设置为目标html。以您的示例代码为例:
{{1}}
答案 2 :(得分: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();
});
});
});
答案 3 :(得分:1)
似乎是行
f = open(myFile,'w')
f.write(htmlString)
有问题,因为生成的文件为空。
我用
解决了这个问题with open(myFile,'wt') as f:
f.write(htmlString)
或者您可能需要添加
f.close() to your code