Google検索ページにあらかじめ設定された検索語句(「Apples」)を読み込んでいます。次に、検索ボックスに入力して別のものを探したいのですが、期待通りに動作しません(コードの下の詳細な説明)。CasperJSは、Google検索をスクラップするときに、特定のユーザーエージェント文字列を設定変更すると異なる結果を返します。
var links = [];
var casper = require('casper').create({
// verbose: true,
// logLevel: "debug"
// pageSettings: {
// userAgent: 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5'
// }
});
function getLinks() {
var links = document.querySelectorAll('h3.r a');
return Array.prototype.map.call(links, function(e) {
return e.innerText;
});
}
casper.start('https://www.google.com/#safe=off&q=Apples', function() {
// search for 'casperjs' from google form
this.fill('form[action="/search"]', { q: 'casperjs' }, true);
casper.capture('screenshot/googleresults1.png');
});
casper.then(function() {
// aggregate results for the 'casperjs' search
links = this.evaluate(getLinks);
casper.capture('screenshot/googleresults2.png');
// now search for 'phantomjs' by filling the form again
this.fill('form[action="/search"]', { q: 'phantomjs' }, true);
});
casper.then(function() {
// aggregate results for the 'phantomjs' search
links = links.concat(this.evaluate(getLinks));
});
casper.run(function() {
// echo results in some pretty fashion
this.echo(links.length + ' links found:');
casper.capture('screenshot/googleresults3.png');
this.echo(' - ' + links.join('\n - ')).exit();
});
私が経験したバグ:
- を.createでユーザーエージェント(含む)は私のコンソールには結果を与えません。
- :
- ユーザーエージェントをコメントアウトが、冗長とログレベルを含め、私の「りんご」を与え、すべてをコメントアウト
- の結果を私に右の結果(CasperjsとPhantomjs)
私の質問を与えます私は、verboseとLogLevelの両方をオンにすると、casper.start関数のように "Apples"の結果が得られるのか理解できません。
他に誰かがいるのですか?ご覧のとおり、適切な結果は、検索ボックスに入力された両方の塗りつぶし機能によって、CasperjsとPhantomjsになります。
のスクリーンショットいくつかの場面で、私のコンソールで数回のプログラムを繰り返した後、第一フィルアクションが進まない表示されます。したがって、それはアップルをこすります。しかし、なぜこれが不思議ですか?代わりに別の関数を使用するように変更する必要がありますか?
スクレイピング/自動化を開始するときは、Googleのページから始めないことをおすすめします。 –
非常に助けてくれてありがとう。あなたの提案したことをスクリーンショットで更新しました。私のクエリCasperJsの最初の塗りつぶし関数は通過しないようです。したがって、プログラムは "Apple"を擦り傷をつけます。 また、私がuserAgentをインクルードすると、スクリーンショットが表示されてもページ全体が読み込まれません。それに何か問題がありますか?どうもありがとう。 this.getHTML()またはcasper.getHTML()を使用する必要がありますか? – Ming
フィードバックをいただきありがとうございます。私はCasperJSについてもう一つ質問があります。 http://stackoverflow.com/questions/36386601/casperjs-not-returning-google-search-link-titles-but-screenshot-source-code-te あなたもそれを見ることができます。ありがとう。 – Ming