2016-04-05 19 views
0

Ich benutze derzeit Capybara, um einige Verschrottungsaufgaben sowie Site-Tests auszuführen. Ich habe Probleme beim Herunterladen von Bildern/Dateien mit Capybara. Alle Dokumentationen, die ich gefunden habe, führen nur auf einfache Schaltflächen, Formulare, Links Interaktion.Konvertieren von Bild in Base64 mit Capybara

Ich würde es wirklich zu schätzen wissen, wenn jemand weiß, wie man Bilder auf einer Webseite ins Base64-Format konvertiert.

+0

Es ist nicht nativ unterstützt, sondern ein Weg könnte zu gehen, einige js exec, dann verwenden base64 kodiere es so. Es gibt hier einen ziemlich guten Grund dafür, dass Sie die wichtigen Bits extrahieren konnten: https://gist.github.com/HereChen/e173c64090bea2e2fa51 – trh

Antwort

0

Ich habe gerade durch den Capybara-Edelstein geschaut und eine .render_base64- und save_screenshot-Methode gefunden, die das Bild in PNG- oder JPG-Datei speichern konnte und danach konnte ich den gewünschten Teil zuschneiden. Verfahren finden sich hier: https://github.com/teampoltergeist/poltergeist

1

Dieses Beispiel extrahiert ein Bild von einer Webseite mit Capybara/Selen:

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 
Verwandte Themen