Delphi Embarcadero 2010 i webbrowser obsługa stron powyżej ie7.

0

Witam
Szukam już od dłuższego czasu komponentu który działał by jak webbrowser z pakietu delphi, ponieważ standardowy komponent działa jak ie6 co powoduje że strona którą próbuję otworzyć przy pomocy delphi wywala komunikat że używam zbyt starej wersji przeglądarki. Strona wymaga minimum ie7. Zastosowałem Mozillabrowser, ale znowu działa bardzo niestabilnie przy stronie z javą i fleshem (raz działa wszysko ok a raz wywali błąd zaraz po otwarciu strony i zawiesza cały program, błędy wskazują na biblioteke od flash). Przerobiłem również browserviwer i również za stary. Próbowałem odpalić xulrunner http://ftp.mozilla.org/pub/mozilla.org/mozilla.org/xulrunner/releases/ albo gecko https://developer.mozilla.org/pl/docs/Gecko_SDK z tymi dwoma za to sobie nie potrafię poradzić może jakieś pomysły jak to ruszyć? Przypuszczam że one nie są dostosowane pod delphi. Udało mi się odpalić za to http://d-gecko.svn.sourceforge.net/ gecko ale również wyrzuca mi komunikat że używam za starej przeglądarki. Więc czy jest coś innego ? albo jakiś sposób na aktualizację jakiegoś komponentu??

0

A nie możesz tej strony "okłamać" przez ustawienie UserAgent w WebBrowser że przeglądarka jest w nowszej wersji? Faktycznie błędnie się wyświetla czy coś? No i co chcesz robić na tej stronie pobrać jakieś dane czy coś?

0

A gdzie ten UserAgent jest jeśli w Object Inspector to nie w mojej wersji delphi przez webbrowser1.userAgent też się nie da nic ustawić bo nic takiego nie ma ewentualnie znalazłęm coś takiego:

 
var
url, flags, targetframe, postdata, headers:olevariant;
begin
url:='http://localhost/test.php';
  flags:=0;
  targetframe:=varnull;
  postdata:=varnull;
  headers:='Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; WOW64; SV1; InfoPath.2; .NET CLR 2.0.50727)';
  webbrowser1.navigate(url, flags, targetframe, postdata, headers);
end;

Jeśli chodzi ci o coś takiego to się nie daje oszukać.
Potrzebuje zczytać kilka danych z tej strony, ale najpierw muszę się tam zalogować.

0

A no to pewnie próbowałeś sie zalogować normalnie wypełniając jakiś formularz i klikając na przycisk... wtedy "podrobiony" UserAgent nike działa... No ale czy w ogóle jest sens wyciągać na to armatę. Trzeba sprawdzić czy do odczytu tych danych koniecznie musi być obsługa JavaScript jeżeli nie to pobierz stronę i zaloguj się przez Synapse lub Indy a jeżeli jednak musi być JavaScript to trzeba programowo metodą POST wysłać "niby formularz" w rzeczywistości dane logowania i tak się zalogować. Gdybym wiedział o jaką stronę chodzi to bym sprawdził o co tam dokładnie biega.

0

chodzi o grę przeglądarkową ogame.pl Chciałem sobie stworzyć narzędzie które informowało by mnie o wydarzeniach :) gdy mnie tam nie ma :)

0

Do ogame zalogować się możesz spokojnie przy użyciu Indy (w Synapse na pewno też). Mam nawet przykład wprawdzie stary bo robiłem go sądząc po datach moich plików projektu w prawie 2 lata temu (chyba dla kogoś tutaj na forum ale nie mogę znaleźć tematu) ale jak nic się nie zmieniło na stronie przy logowaniu to powinien działać.

procedure TForm1.Button1Click(Sender: TObject);
const
  USER_AGENT = 'Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0';
  OGAME_URL = 'http://ogame.pl/';
  SERV_IO_LOGIN_URL = 'http://uni109.ogame.pl/game/reg/login2.php';
var
  sl: TStringList;

begin
  IdHTTP1.HandleRedirects:= True;
  IdHTTP1.Request.UserAgent:= USER_AGENT;
  IdHTTP1.Get(OGAME_URL);
  IdHTTP1.Request.Referer:= OGAME_URL;
  IdHTTP1.Request.ContentType:= 'application/x-www-form-urlencoded';
  sl:= TStringList.Create;
  try
  sl.Add('uni_id=');
  sl.Add('kid=');
  sl.Add('v=2');
  sl.Add('is_utf8=0');
  sl.Add('uni_url=uni109.ogame.pl');
  sl.Add('login=nazwa uzyszkodnika');
  sl.Add('pass=tajne haselko');
  Memo1.Text:= IdHTTP1.Post(SERV_IO_LOGIN_URL, sl);
  finally
    sl.Free;
  end;
end;

w Memo powinien być kod HTML strony po zalogowaniu.

A o co chodzi z tymi wydarzeniami to nie wiem bo nigdy w to nie grałem.

0

fakt troszkę się od tego czasu pozmieniało, ale samo logowanie jest do przeskoczenia ewentualnie, ale jak potem przejść do innej podstrony ? bo akurat interesujące mnie informacje nie wyświetlają się zaraz po zalogowaniu

0

Za pewne pobrać je metodą GET, bez ruszania ciasteczek by nie utracić zalogowania. Jeżeli są wymagane wzbogacone nagłowki to najlepiej ustal je sobie pod Snifferem lub Debuggerem HTTP. Poczytaj na przykład mój artykuł o Synapse i HTTP na: Obsługa protokołu HTTP przy użyciu pakietu Synapse ewnetualnie mnóstwo stron do znalezienia w google lub samą dokumentacje oraz przykłady czy to zawarte z Synapse, czy z Indy. Tak, jak napisał @kAzek używanie TWebBrowser aby się zalogować na stronę i pobrac jakieś dane kiedy strona nie wymaga kombinacji z JavaScriptem, to jak polowanie na muchy z armatą i jest po prostu bezsensowane aby do tego celu używać komponentów opartych o niezawsze szybkie i do końca bezpieczne IE.

0

tylko mi nie chodzi o tylko ściągniecie informacji tylko o możliwość normalniej gry z przydatnym narzędziem z boku które będzie przeliczało na bieżąco wyniki potyczek, albo ile statków wysłać takie miałem założenie. Taka możliwość ściągnięcia tych danych tak naprawdę stworzy mi konkretnie tylko takie dodatkowe narzędzie które już istnieje.

0

Jeśli chcesz równocześnie mieć przeglądarkę z ogame i swój program to musisz mieć zsynchronizowane sesje. Jeśli ma to być dodatek do gry lepiej zainteresować się jakimiś skryptami np. greasemonkey, po przeładowaniu strony w przeglądarce miałbyś od razu świeże dane a nie pobierał je osobno w programie i przeglądarce. Poza tym takie skrypty jak opisujesz są dostępne ogólnie - wystarczy poszperać w internecie.

0

Jest taki drobny sposób:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

wystarczy dodać klucz:

"jakiśprogram.exe"=dword:00002328

i już IE w TWebBroser zachowuje się jak 9 dla tej aplikacji.

Dla 8 ta wartość to 00001F40

dla 10 pewnie będzie to : 00002710 ale jeszcze nie sprawdzałem ;-)

Pozdrawiam
Paweł

0
szopenfx napisał(a):

Jeśli chcesz równocześnie mieć przeglądarkę z ogame i swój program to musisz mieć zsynchronizowane sesje.

Witam serdecznie

Podłącze się pod temat i zadam pytanie:

W jaki sposób zsynchronizować sesje w Synapse lub Indy i jak póżniej korzystać z GET lub POST w delphi?

Proszę o pomoc

0

Pobierz sobie identyfikator sesji ogame z przeglądarki - jest w źródle strony oraz w cookies o ile nic się nie zmieniło od około roku. Najważniejsze to to, żeby nie używać przeglądarki równocześnie z programem bo np. w programie wysyłasz flotę i czekasz na przybycie w przeglądarce ją zawrócisz, później program nie wie czy nagle z powietrza pojawiła się nowa flota i gdzie jest raport z tą którą wysyłałeś - nieprzewidywalnych problemów może być cała masa.

Opis połączenia synapse
Obsługa protokołu HTTP przy użyciu pakietu Synapse
Opis INDY
HTTP
INDY

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