0

このコードをphantomjsで実行しています。form.elements が null を返し続ける理由がわかりません。Chrome 開発者コンソールで同じコードを実行したところ、必要な正しい結果が得られました。

私はjavascriptと関連するすべてにかなり慣れていません。光を当ててください。

var page = require('webpage').create();
page.open('http://www.kayak.com', function (status) {
    if (status !== 'success') {
        console.log('Unable to access network');
    } else {
        var form = page.evaluate(function(){
             return document.getElementById('searchform');
        });
        console.log(form.elements[2].value);
    }
    phantom.exit();
});
4

1 に答える 1

2

を介して非プリミティブ オブジェクトを渡すことはできませんevaluate。これはドキュメントに記載されています:

注: 評価関数への引数と戻り値は、単純なプリミティブ オブジェクトでなければなりません。経験則: JSON 経由でシリアル化できる場合は問題ありません。クロージャ、関数、DOM ノードなどは機能しません!

これは PhantomJS を使用する際に最もよくある間違いですが、解決するのはかなり簡単です。できる限りすべての処理を行ってからevaluate、単純なオブジェクトを返すようにしてください。詳細については、ドキュメントを注意深く読み、含まれているすべてのから学んでください。

于 2013-02-11T09:11:43.877 に答える