TWebBrowser - Monitor stron www google.

0

Piszę program do sprawdzania pozycji Twojej strony internetowej w google.

Za przejscie do następnej strony odpowiada przycisk 'pnnext'.

Wykonuje wiec petle 'i' gdzie 10 razy powinna sie powtorzyc. Rezultat powinno mnie skierowac na 10 strone, tak aby w 'listaURL' bylo 100 wynikow.

Niestety, w kodzie ponizej przechodzi tylko do strony nr '2'. nie wyskakują żadne błędy, jednak teoretycznie powinno przejsc do 10 strony.

Co ciekawe, gdy zrobie oddzielny Button w programie i wkleje kod KliknijID('pnnext') bez problemu przechodzi do kolejnych stron.

Nie mam pomyslu co moze nie dzialac... jakis problem z odswiezaniem strony? nie wiem...

for j := 1 to 10 do
  begin
    for i := 1 to 10 do
    begin
      listaURL.Add(Ereg(kodHTML, '<CITE>|</CITE>')); // Pomiedzy tymi znacznikami są adresy
    end; //pnnext
    KliknijID('pnnext'); // teoretyczne przejscie do stron 2,3,4...10 TU JEST PROBLEM!
    CzekajNaWWW;
  end;
 
0

Z TWebBrowser to najlepiej pomoże chyba tylko @kAzek. Tylko ja się zastanawiam dlaczego wszyscy tak upierają się do obsługi HTTP na stronach nie potrzebujących do działania JavaScriptu koniecznie korzystać z TWebBrowsera, a nie z Synapse, Simple Tcp albo od biedy Indy? Jak chcesz zabić muchę to dzwonisz po wsparcie Air Strikie? ;) Chyba nie. Ja w tym kodzie nie widzę żadnego odwołania do iteratora pętli, a nie mam pewności czy ID, który wywołujesz jest na pewno prawidłowy. Anyway, z tego co się orientuje odwiedzając stronę google z identycznym UserAgentem jak jakaś popularna przeglądarka z pod popularnego systemu operacyjnego uzyskamy ten sam efekt jakbyś odwiedził ją fizycznie wklepując jakieś hasło lub wklejając gotowy link. Oczywiście należy obsłużyć ewentualne przekierowania. Dla pewności możesz pod Snifferem / Debuggerem HTTP upewnić się, jakie dodatkowe dane są wysyłane w nagłowkach podczas odwiedzania google używaną przez Ciebie prawdziwą przeglądarką http://piechnat.pl/article/simpletcp.html do nich zbliżone jeśli nie identyczne. Później już tylko w pętli wystarczy zwiększać parametr start= w odnośniku do strony, zaczynając od zera i zwiększając go później o 10. Ja osobiście w taki sposób bym spróbował pokombinować, a nie jakaś kurcze niezrozumiała dla mnie "moda na TWebBrowser". Wiadomo, ktoś inny może mi zarzucić, że polecam Synapse. Ale jeżeli nie musi być coś po HTTPS, a o ile wiem google tak również da się odwiedzić to możę być Simple Tcp z http://piechnat.pl/article/simpletcp.html - nawet nieużywane przeze mnie Indy, ale na Boga, nie ciągle ten TWebBrowser. Jeżeli chodzi Tobie tylko o zasymulowanie odwiedzin, a nie fizyczne otrzymanie w formie wizualnej wynikowej strony to o wiele bardziej się to nada. Oczywiście jeżeli chcesz to robić po HTTPS to z użyciem Synapse również nie będzie żadnych problemów, bo jest tam zawarta gotowa obsługa ów protokołu.

0

Tak, wlasnie dlatego zdecydowalem sie na TWebBrowser gdyz jako tako umiem obslugiwac sie tym komponentem.

W indy denerwowaly mnie ciagle bledy z obsluga SSL, a niestety google jest teraz szyfrowane :)

Moze faktycznie rozwiazaniem bylby pakiet synapse. Musialbym sie jednak nauczyc obslugi nowej kontrolki. Sprawdze ten pakiet i dam znac :)

0

Spoko. A skorzystanie z Synapse to według mnie żaden "ból". Istnieje dokumentacja oraz przykłady na stronie projektu. Jest mój artykuł na: Obsługa protokołu HTTP przy użyciu pakietu Synapse - poza tym na pewno nie ma żadnych problemów z HTTPS. Wystarczy zrobić to co opisałem w artcie. A i nieprawdą jest, że google wymaga HTTPS. Bez problemów otwiera się również po HTTP. Sprawdź poniższy kod - działa ok:

//...
uses
  httpsend;
//...
const
  Redir_C = 'Location: ';
  Opera_UserAgent = 'Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.7.62 Version/11.01';
var
  SL : TStringList;
  SynHttp : THttpSend;
  I, RedirPos : integer;
  FPage, RedirUrl : string;
begin
  SL := TStringList.Create;
  SynHttp := THttpSend.Create;
  with SynHttp do
  begin
    KeepAlive := True;
    Protocol := '1.1';
    UserAgent := Opera_UserAgent;
    HttpMethod('GET', 'http://www.google.pl/');
    SetLength(FPage, Document.Size);
    Document.Read(PChar(FPage)^, Length(FPage));
    while (ResultCode = 301) or (ResultCode = 302) do
    begin
      for I := 0 to Headers.Count - 1 do
      begin
        RedirPos := Pos(Redir_C, Headers[I]);
        if RedirPos > 0 then
        begin
          RedirUrl := Copy(Headers[I], RedirPos + Length(Redir_C), MaxInt);
          Headers.Clear;
          HTTPMethod('GET', RedirUrl);
          Break;
        end;
      end;
    end;
  end;
  SL.Text := FPage;
  SL.SaveToFile('D:\test.html');
  SynHttp.Free;
  SL.Free;
end;
//...
0

Olesio Twoja pomoc jest nieoceniona :)
Kto inny zbywalby mnie iz mam szukac w goole - jak to wiele osob daje aby nabijac sobie posty, a Ty faktycznie starasz sie pomoc uzywajac wiedzy ktorej posiadasz!
Trzymaj tak dalej! :)

Jeszcze pytanie do Ciebie - dlaczego uwazasz ze synapse jest lepsze od Indy? Dotychczas bylem przyzwyczajony do tego pakietu, moze ze wzgledu iż na temat indy byly tutaj artykuly, jednak jestem ciekaw Twojego zdania

0

Skoro spod buttona idzie to pewnie z CzekajNaWWW jest coś nie tak. Spróbuj wymienić go na kilkusekundowego Sleep'a, żeby to sprawdzić.
na pętlę prztwarzającą komunikaty trwającą kilka sekund:

start := czasobecny;
while czasobecny < start + kilkasekund do
    Application.ProcessMessages;
0
bronex napisał(a):

Jeszcze pytanie do Ciebie - dlaczego uwazasz ze synapse jest lepsze od Indy? Dotychczas bylem przyzwyczajony do tego pakietu, moze ze wzgledu iż na temat indy byly tutaj artykuly, jednak jestem ciekaw Twojego zdania

Indy - o ile wiem - nie jest już rozwijane i poprawiane. Poza tym z Indy ciągle są jakieś problemy, których rozwiązania czasami z trudem jest w stanie dojśc tutaj chyba tylko @kAzek :/ Poza tym Indy trzeba raczej instalować albo wrzucać do katalogu projektu masę modułów, a z tego co się orientuje w przypadku Synapse jest tego o wiele mniej i łatwiej to zrobić. Zgłoszono mi też w komentarzu do mojego artykułu o używaniu Synapse do obsługi protokołu HTTP na 4p, że ponoć Synapse jest "szybsze i stabilniejsze", chociaż to może subiektywne odczucie. Szczególnie szybkośc, która zależy na ogół o ile wiem od posiadanego łącza oraz serwera docelowego i kodu z wykorzystaniem modułów danego pakietu. Jednak ja nikogo nie namawiam, jeżeli chcesz używać Indy to proszę bardzo. Ja osobiście dawno już porzuciłem Indy. Mam taką zasadę, że wolę niestandardowe dla Delphi 7 Personal komponenty dostarczać do kodu źrółowego wrzucając ich moduły do katalogu z projektem i korzystać z nich dynamicznie. Wtedy projekt jest bardziej przenośny i wygodniejszy dla kogoś w kompilacji. Wzieło się to może jeszcze z czasów gdy niezrażony bezpodstawnymi zarzutami o malware rozdawałem gotowce w archiwach rar na lewo i prawo, co niestety jak pokazał czas bardziej powodowało "krzywdę" tym którzy takie kody w gotowej postaci wraz z exekiem i wszystkimi potrzebnymi plikami otrzymywali.

EDIT: no tak @bronex komentarz pod artem był oczywiście Twój, co nie zmienia faktu że kod Synapse - chociaż dokładnie go nie analizowałem - wydaje mi się również faktycznie moze ciutke optymalniejszy od Indy. Po prostu od dawna to jego wolę używać. Z Indy miałem jakieś problemy przy POSTowaniu, wersję 9, z tego co pamiętam miały chyba też problemy z obsługą HTTPS. A podstawową składnie Synapse mam opanowaną. Niestety niektórzy ludzie według mnie mają jakieś klapki na oczach i albo się upierają na skorzystanie Indy albo co gorsze w przypadku w których spokonie można skorzystać z Indy/Synapse/SimpleTcp - z niezrozumiałych dla mnie względów - upierają się na TWebBrowser. Wynika to być może poczęści z niewiedzy, ale ta niewiedza wynika częśto - według mnie, z totalnego lenistwa, bo nie googlują za informacjami jak zrobić coś inaczej/lepiej.

0

Indy jest rozwijane (najnowsze wersje na http://indy.fulgan.com/ZIP/) a co do szybkości to chyba Synapse nie może być szybsze zwłaszcza przy HTTP(S) z uwagi na brak obsługi kompresji danych gzip ale Indy faktycznie czasami miewa swoje humory i trzeba się trochę pomęczyć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1