2016-07-10 15 views
1

Wie kann ich iframe mit zufällig generiertem Namen mit Albtraum-Iframe-Plugin zugreifen?Nightmare-iframe dynamischer iframe Name

Ich habe

versucht
var name = yield nightmare 
    .goto(defaultUrl) 
    .click('.btn-login') 
    .wait('iframe') 
    .evaluate(function() { 
    return document.getElementsByTagName('iframe'); 
    }); 

yield nightmare.use(iframe.withFrameName(name, function(IFnightmare) { 
    IFnightmare 
    .type('input[name=username]', 'username') 
    .type('input[name=password]', 'password') 
    .click('button[type=submit]') 
})) 

aber dieser Code endet mit - Typeerror: kann Eigenschaft ‚switchToFrame‘ undefinierter

+0

Welche Version von Albtraum verwenden Sie? – Ross

+0

Ich verwende Version 2.5.3 und Albtraum-Iframe 1.0.2 – yunicz

Antwort

2

nightmare-iframe ist nicht kompatibel mit Albtraum> 2.x lesen - es erwartet der Lage sein, in PhantomJS switchToFrame aufrufen, die nicht in Electron vorhanden ist.

Von hier aus, ich glaube, Sie haben zwei Möglichkeiten:

  1. Fall zurück zum Albtraum 1.8.x. Es wird nicht mehr unterstützt (nach meinem besten Wissen), aber es läuft mit PhantomJS als Backing-Renderer.
  2. Verwenden Sie eine andere Bibliothek.This PR wurde als Fix für the long-standing iframe issue vorgeschlagen, wenn Sie mit Electron als möglichem Weg arbeiten, um Nightmare dazu zu bringen, ähnliche Arten von Aktionen auszuführen, die Sie benötigen. Ich habe es als plugin umgeschrieben, was für Sie nützlich sein kann. (Das Plugin ist sehr gefährlich. Mit Vorsicht verwenden.)

Der Vollständigkeit halber soll ich auch darauf hinweisen, dass natives iframe Unterstützung has been proposed für die nächste größere Überarbeitung des Albtraums.