現在、capybaraを使用していくつかのスクラップ処理とサイトテストを実行しています。私はcapybaraを使用して画像/ファイルをダウンロードすることが困難でした。私が見つけたすべての文書は、単純なボタン、フォーム、リンクの相互作用についてのみガイドしています。capybaraを使用して画像をbase64に変換
誰かがWebページの画像をbase64形式にダウンロード/変換する方法を知っていると本当に感謝します。
現在、capybaraを使用していくつかのスクラップ処理とサイトテストを実行しています。私はcapybaraを使用して画像/ファイルをダウンロードすることが困難でした。私が見つけたすべての文書は、単純なボタン、フォーム、リンクの相互作用についてのみガイドしています。capybaraを使用して画像をbase64に変換
誰かがWebページの画像をbase64形式にダウンロード/変換する方法を知っていると本当に感謝します。
カピバラの宝石を見て、画像をpngまたはjpgファイルに保存することができる.render_base64とsave_screenshotメソッドが見つかりました。その後、私は必要な部分を切り抜くことができました。この方法は、ここで見つけることができます:https://github.com/teampoltergeist/poltergeist
この例では、カピバラ/セレンを使用したWebページから画像を抽出します。それは、ネイティブにサポートされていない
require 'capybara'
JS_GET_IMAGE = "
var ele = arguments[0], callback = arguments[1], img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = function(){
var cnv = document.createElement('CANVAS');
cnv.width = this.width;
cnv.height = this.height;
cnv.getContext('2d').drawImage(this, 0, 0);
var type = this.src.endsWith('png') ? 'png' : 'jpeg';
callback(cnv.toDataURL('image/' + type).substring(22));
};
var src = ele.src || window.getComputedStyle(ele).backgroundImage;
img.src = /https?:/.test(src) ? src.match(/https?:[^\"')]+/)[0] : callback(''); "
session = Capybara::Session.new(:selenium)
driver = session.driver.browser
driver.manage.timeouts.script_timeout = 5000
# navigate to google
session.visit "https://www.google.co.uk/"
# get the logo element
ele = session.find(:css, '#hplogo img:nth-child(1)')
# get the logo as base64 string
imgBase64 = driver.execute_async_script(JS_GET_IMAGE, ele.native)
# save to a file
file = File.new("C:\\temp\\image." + (imgBase64[0] == 'i' ? 'png' : 'jpg'), 'wb')
file.write(Base64.decode64(imgBase64))
file.close
が、いくつかのJSをexecしするかもしれない移動するための方法、そして使用しますbase64はそのようにエンコードします。ここでは、重要なビットを抽出することができます。https://gist.github.com/HereChen/e173c64090bea2e2fa51 – trh