2012-02-22 4 views
19

私は現在、CasperJSとPhantomJS(どちらも優れたツール、n1k0とAriyaに感謝しています)でGoogleキーワードツールを削り取ろうとしていますが、動作させることができません。 (キーワードツールでcaptchaのを避けるために)私のGoogleアカウントでGoogleキーワードツールをCasperJSとPhantomJSで掻く

  1. ログイン:

    は、ここに私の現在のプロセスです。

  2. キーワードツールページに移動します。
  3. 検索フォームに記入し、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の重いサイトを掻き取ろうとする人にとってはこの質問が興味深いと思っています。

+0

おそらく、このテキストエリアがロードされ、使用可能になるのを待つ必要があります。 [waitForSelector()](http://casperjs.org/#phantom_Casper_waitForSelector)のドキュメントをチェックアウトしてください – NiKo

+0

すぐに返信いただき、ありがとうございます。 私はあなたの提案をすでに試してみました。実際には、ここに表示されているコードは 'WaitFor()'ステートメントの中で囲まれています。私は 'WaitForSelector( 'textarea.sP3.sBFB')'と '__utils __。exists()'のおかげでフィールドの存在をテストする関数を持つ 'WaitFor()'を試みましたが、どちらもうまくいきませんでした。 – AngularChef

答えて

0

ここで何が起こっているのかよく分かりませんが、ターゲティングに使用しているクラスは私とは異なります。あなたがターゲットにしようとしていると仮定したOneBoxKeywordsInputPanel-inputのテキストエリアには、第2のクラスsPFBがあり、他のクラスはありません。これらの潜在的なクラスは何らかの形で動的である可能性があります。代わりに、より分かりやすいクラス名を使用することをお勧めします。以下は私のためだけで正常に動作:

あなたがテキストエリアに elt.valueを使用することはできません
document.querySelector('textarea.OneBoxKeywordsInputPanel-input') 
1
document.querySelector('textarea.sP3.sBFB').value = 'MY SUPER KEYWORDS'; 

elt.textContentで試しましたか?

1

なぜ結果をスクラップしようとしますか? Googleが既にCSVファイルを作成しています ダウンロードしてみてください。そのリンクセレクタは$( '。gux-combo gux-dropdown-c .sJK')のようにする必要があります ものを自動化するために使用しますか?

+1

どのようなCSVファイルですか?それはちょうどパイプの夢です。そのようなものはユニコーンのようなものです!存在しません。 –

+0

アドワーズ広告のキーワードパネルを調べて、広告が表示されたすべてのキーワードの組み合わせを検索できる非表示の非表示のセクションが隠されていることを確認してください。それは私にとって金鉱です。 –

+0

@ErdinçÇorbacıどのセクションを意味しますか?どうも – simion314

関連する問題