2012-02-22 27 views
19

Próbuję obecnie zeskrobać Narzędzia Google do słów kluczowych za pomocą CasperJS i PhantomJS (oba doskonałe narzędzia, dzięki n1k0 i Ariya), ale nie mogę go uruchomić.Skrobanie Narzędzia Google do słów kluczowych za pomocą CasperJS i PhantomJS

Oto mój obecny proces:

  1. Zaloguj się z moim kontem Google (aby uniknąć captchas w narzędziach słowa kluczowego).
  2. Przejdź do strony Narzędzia propozycji słów kluczowych.
  3. Wypełnij formularz wyszukiwania i naciśnij Search.

Utknąłem w kroku 3: formularz wyszukiwania nie jest zwykłym formularzem HTML, nie mogę użyć Casper#fill(), więc zamiast tego uzyskuję bezpośredni dostęp do pól. Oto niektóre z składni próbowałem zmienić wartość pola 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'; 
}); 

Nic nie działa. Robię Casper#capture() zaraz po, aby zobaczyć, co zawiera pole. As you can see, potwierdza, że ​​jestem na właściwej stronie i że jestem zalogowany, ale <textarea> jest pusty.

dziwo, można uzyskać dostęp do innych części DOM: mogę zmienić tekst linku, że wspomniany Advanced Options and Filters do ___VINCE SAYS HELLO___ (patrz przechwytywanie), wykonując następujące czynności:

this.evaluate(function() { 
    document.querySelector('a.sLAB').textContent = '___VINCE SAYS HELLO___'; 
}); 

PS. Wiem, że skrobanie Narzędzi Google do słów kluczowych jest sprzeczne z TOS, ale myślę, że to pytanie może być interesujące dla każdego, kto próbuje zeskrobać ciężką stronę JavaScript/Ajax.

+0

Prawdopodobnie musisz poczekać na załadowanie i udostępnienie tego pola tekstowego. Wyloguj się z [dokumentacji for waitForSelector()] (http://casperjs.org/#phantom_Casper_waitForSelector) – NiKo

+0

Dzięki za szybką odpowiedź, NiKo. Już wypróbowałem twoją sugestię. W rzeczywistości kod, który widzisz tutaj, jest zawarty w instrukcji 'WaitFor()'. Próbowałem 'WaitForSelector ('textarea.sP3.sBFB')' i także 'WaitFor()' z funkcją testującą istnienie pola dzięki '__utils __. Exists()', ale nie działało. – AngularChef

Odpowiedz

0

Nie jestem pewien, co się tutaj dzieje, ale zajęcia, których używasz do kierowania, są dla mnie inne. Obiekty tekstowe, które zakładam, próbujesz kierować, mają drugą klasę, sPFB i nie mają innych klas. Możliwe, że te tajemnicze klasy są w jakiś sposób dynamiczne. Zamiast tego polecam używanie bardziej opisowych nazw klas. Poniższe działa dobrze dla mnie:

document.querySelector('textarea.OneBoxKeywordsInputPanel-input') 
1
document.querySelector('textarea.sP3.sBFB').value = 'MY SUPER KEYWORDS'; 

Nie można używać elt.value na textarea. Czy próbowałeś z elt.textContent?

1

Dlaczego próbujesz zeskrobać wyniki. Google już tworzy plik csv dla nas. Spróbuj pobrać to. Ten selektor łączy musi być jak $ (". Gux-combo gux-dropdown-c .sJK") Czy użyjesz tego do automatyzacji?

+1

Jaki plik CSV? to tylko fajne marzenie. Takie coś jest jak jednorożce! Nie istnieje. –

+0

Przejdź i sprawdź panel słów kluczowych adwords, gdzie znajduje się ukryta, już nie ukryta sekcja, w której możesz pobrać wszystkie kombinacje słów kluczowych, które spowodowały Twoje reklamy. Dla mnie to jest kopalnia złota. –

+0

@ ErdinçÇorbacı jaką sekcję masz na myśli? Dzięki – simion314

Powiązane problemy