2016-04-27 23 views
2

文書内の要素のコントロールを取得する方法を探しています。問題は、ドキュメントがiFrameに添付されていることです。ここでphantomJSを使用してiframeの要素を取得できません

は例です:私は上記のやろうとしています何

.goto('https://wirecard-sandbox-engine.thesolution.com/engine/hpp/')  

    .use(iframe.withFrameName('wc', function (nightmare) { 
    nightmare 
      .type('#account_number', accountNumber) 
     .screenshot(resultfolder + '\\06-Card-Number.png') 
     .type('#card_security_code', testData.securityCode) 
     .selectIndex('#expiration_month_list', 1) 
     .selectIndex('#expiration_year_list', 4) 
     .click('span[id="hpp-form-submit"]') 
})) 

は次のとおりです。

  • のURLでiFrameを取得します。
  • これを使用して、iFrameのすべての要素のコントロールを取得します。
+0

PhantomJSを使用していますか?最新の悪夢のバージョンはElectronを使用しています。 –

答えて

2

同様の問題が発生しました。何らかの理由で(Windows?旧式?)パッケージnightmare-iframeは私のために働いていませんでした。

だから私はあなたのために書き写すう純粋なDOMを使用して、これをした:メインページやsame-originがIFRAMEに許可されているとのiframeが同じドメイン内にある場合

var info = { 
    "account": account_number, 
    "security": testData.security_code; 
}; 

nightmare.wait(() => { 
    /* Return true when the iframe is loaded */ 
    var iframe = document.querySelector("iframe[name='wc']"); 

    if (!iframe) { 
     return false; 
    } 

    var iframeDocument = iframe.contentDocument || iframe.contentWindow.document; 

    return iframeDocument.querySelector("#account_number") != null; 
}).evaluate((info) => { 
    var iframe = document.querySelector("iframe[name='wc']"); 
    var iframeDocument = iframe.contentDocument || iframe.contentWindow.document; 

    iframeDocument.querySelector("#account_number").value = info.account; 
    iframeDocument.querySelector("#card_security_code").value = info.security; 
    //also use DOM to set proper date 
    ... 

    iframeDocument.querySelector("span#hpp-form-submit").click(); 
}, info).then(() => { 
    console.log("submit done!"); 
}).catch((error) => { 
    console.error("Error in iframe magic", error); 
}); 

もちろんこれだけで動作します。私のユースケースは、マーチャントのページからpaypalにログインしていました。

異なる起点のiframeの場合、nightmare-iframeが使用するパッケージになりますが、問題の原因を調べるにはエラーが必要です。

関連する問題