私は現在、CasperJSとPhantomJS(どちらも優れたツール、n1k0とAriyaに感謝しています)でGoogleキーワードツールを削り取ろうとしていますが、動作させることができません。 (キーワードツールでcaptchaのを避けるために)私のGoogleアカウントでGoogleキーワードツールをCasperJSとPhantomJSで掻く
- ログイン:
は、ここに私の現在のプロセスです。
- キーワードツールページに移動します。
- 検索フォームに記入し、
Search
を押します。
検索フォームが通常のHTMLフォームではありません。Casper#fill()
を使用できません。代わりに、フィールドに直接アクセスしています。
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';
});
何も動作:ここで私はWord or phrase
フィールドの値を変更しようとした構文の一部です。フィールドの内容を確認した直後にCasper#capture()
を実行しています。 As you can see、私は正しいページにあり、ログインしていることを確認しますが、<textarea>
は空です。
不思議なことに、私は、DOMの他の部分にアクセスすることができます:私は、次の操作を実行して、Advanced Options and Filters
___VINCE SAYS HELLO___
に(キャプチャを参照)と、リンクのテキストを変更することができます:
this.evaluate(function() {
document.querySelector('a.sLAB').textContent = '___VINCE SAYS HELLO___';
});
PSを。私はGoogleのキーワードツールを掻き集めることはTOSに反対していることを知っていますが、JavaScript/Ajaxの重いサイトを掻き取ろうとする人にとってはこの質問が興味深いと思っています。
おそらく、このテキストエリアがロードされ、使用可能になるのを待つ必要があります。 [waitForSelector()](http://casperjs.org/#phantom_Casper_waitForSelector)のドキュメントをチェックアウトしてください – NiKo
すぐに返信いただき、ありがとうございます。 私はあなたの提案をすでに試してみました。実際には、ここに表示されているコードは 'WaitFor()'ステートメントの中で囲まれています。私は 'WaitForSelector( 'textarea.sP3.sBFB')'と '__utils __。exists()'のおかげでフィールドの存在をテストする関数を持つ 'WaitFor()'を試みましたが、どちらもうまくいきませんでした。 – AngularChef