6

selenium/phantomjs を使用して、python で html の png ファイルを作成しています。(Web サイトではなく) HTML 文字列またはファイルハンドルから png を生成する方法はありますか? セレンのドキュメントを検索してグーグルで検索しましたが、答えが見つかりませんでした。私は持っている:

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

4 に答える 4

12

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();

お役に立てれば。

于 2013-08-06T01:54:53.053 に答える
4

純粋な古き良き python - 開いているページのコンテンツをターゲット html に設定します - JS を使用します。あなたのコード例を取る:

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"
于 2016-07-27T13:30:21.910 に答える
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

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();
      });
  });
});
于 2015-08-11T05:17:35.807 に答える