初めて PhantomJs を試しています。私の目標は、シンプルでシンプルなページの自動化です。
私がする必要があるのは - ウェブページをロードする、例えば www.google.com としましょう - クエリ用語を入力する - 検索結果ページの単に (本当に、これだけ) console.log
私が見つけたすべてのチュートリアルは複雑すぎるタスクから始まっているため、問題が発生しています。
以下は私の個人的なステップバイステップのチュートリアルですが、これは「送信後にページのコンテンツをログに記録する方法」という質問で「終了」します。
私が行った最初のSTEPは次のとおりです。
var page = require('webpage').create();
page.open('https://www.google.it', function () {
console.log (page.content);
phantom.exit()
});
そして、これは機能します。
次に、jquery を挿入します。
var page = require('webpage').create();
page.open('https://www.google.it', function () {
page.includeJs("http://code.jquery.com/jquery-1.10.1.min.js", function() {
console.log (page.content);
phantom.exit()
});
});
それは働いています。
今、検索ボックスに入力しようとしています。このフィールドに入力する必要があります
<input autocomplete="off" class="lst" value="" title="Cerca con Google" maxlength="2048" name="q" size="57" style="...[omitted]...">
私はこれをやっています:
var page = require('webpage').create();
page.open('https://www.google.it', function () {
page.includeJs("http://code.jquery.com/jquery-1.10.1.min.js", function() {
console.log (page.content);
var value = page.evaluate(function() {
$('input[name="q"]').val("Daduu");
return $('input[name="q"]').val();
});
console.log ("search term: " + value);
phantom.exit()
});
});
そしてそれは働いています。次に、送信ボタンを「クリック」する必要があります
<input class="lsb" value="Cerca con Google" name="btnG" type="submit">
これを行う:
var page = require('webpage').create();
page.open('https://www.google.it', function () {
page.includeJs("http://code.jquery.com/jquery-1.10.1.min.js", function() {
var value = page.evaluate(function() {
$('input[name="q"]').val("Daduu");
$('input[name="btnG"]').trigger("click");
return $('input[name="q"]').val();
});
// console.log (page.content);
page.render("google.png");
phantom.exit()
});
});
画像を見ると(人間の方法でレンダリングされた結果を見るためだけに)、「q」フィールドが埋められた google.it ページが表示されます。
質問は次のとおりです。
**本当にページが読み込まれていますか [Google 検索ですか] ? **
「コンテンツの console.log または page.render へのページ変更を検出する方法は?」
編集: 私はこれを見ます: Phantomjs - フォームに入力し、送信して結果を取得する方法は?
しかし、これは私が必要とするものではありません。ページをレンダリングするために「settimeout」するのではなく、ページの読み込みが完了したことを検出したい。
編集 2: 私はこれを見ます: PhantomJS: フォームを送信します
しかし、これは複雑すぎて、これがどのように機能するのか理解できませんでした。
おそらくsetTimeoutをすべてラップする必要がありますが、jsオブジェクトを使用しているため、イベント駆動型で動作する方法を探しています
onInitialPageLoaded (
fillForm
click
)
onSearchResultLoaded (
render or log content of page
)
しかし、PhantomJsでそれが可能かどうか、そしてそれを実現する方法がまったくわかりません!