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:
- Zaloguj się z moim kontem Google (aby uniknąć captchas w narzędziach słowa kluczowego).
- Przejdź do strony Narzędzia propozycji słów kluczowych.
- 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.
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
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