現在、 CasperJSと PhantomJS (両方とも優れたツールです。n1k0 と Ariya に感謝します) を使用して Google キーワード ツールをスクレイピングしようとしていますが、うまくいきません。
これが私の現在のプロセスです:
- Google アカウントでログインします (キーワード ツールでのキャプチャを避けるため)。
- [キーワード ツール] ページに移動します。
- 検索フォームに入力し、 を押し
Search
ます。
ステップ 3 で行き詰まっています。検索フォームは通常の HTML フォームではありません。使用できないためCasper#fill()
、代わりにフィールドに直接アクセスしています。Word or phrase
フィールドの値を変更しようとした構文の一部を次に示します。
this.evaluate(function() {
// Trying to change the value...
document.querySelector('textarea.sP3.sBFB').value = 'MY SUPER KEYWORDS';
document.querySelector('textarea.sP3.sBFB').setAttribute('value', 'MY SUPER KEYWORDS');
document.querySelector('textarea').value = 'MY SUPER KEYWORDS'; // there's only one <textarea> on the page
// Trying to change other attributes...
document.querySelector('textarea.sP3.sBFB').textContent = 'MY SUPER KEYWORDS';
document.querySelector('textarea').style.backgroundColor = 'yellow';
});
何も機能しません。フィールドに何が含まれているかを確認するために、Casper#capture()
すぐに実行しています。ご覧のとおり、正しいページが表示され、ログインしていることが確認されますが、<textarea>
は空です。
奇妙なことに、DOM の他の部分にアクセスできます。次のようにして、(キャプチャを参照)Advanced Options and Filters
というリンクのテキストを変更できます。___VINCE SAYS HELLO___
this.evaluate(function() {
document.querySelector('a.sLAB').textContent = '___VINCE SAYS HELLO___';
});
PS。Google Keyword Tools のスクレイピングが TOS に違反していることは承知していますが、JavaScript/Ajax を多用するサイトをスクレイピングしようとしている人にとって、この質問は興味深いものになると思います。