Keresés
Hírlevél
 
Kiemelt témák
»Hogy viszonyul ehhez a család?
»Legjobb metodika emberi relációk tárolására
»A programozó hibája, hogy törik a programját?
»Jogosultság kezelés mezőszinten
Állás/munka
»Wordpress szakértőt keresünk
»Kamu álláshirdetők listája
»Front-end fejlesztő / Sitebuilder
»DataStore Developer
»PHP programozó, webfejlesztő munkát keres
» több téma
Tudástár
?HTML-ben a Flash átméretezés torzul
Eredeti mezőnevek lekérdezése
?Input mezőből visszakapott adat probléma
Oldalon keresés 8x írja ki az eredményt
?XML-ből sok szövegmező
TinyMCE és az ékezetek
?Rengeteg hasonló kép betöltése gyorsan (PHP)
Ékezetes kar. nem minden táblában jól
?Shelltreeview gond
Grafikon rajzolás probléma
?Onclick= php függvény
?Egyenes megrajzolása
?Access-ből adott xml fájl kinyerése
Listázás időpont szerint
Exportálás változó könyvtárba
» több téma
Társalgó
»A programozásból jól meg lehet élni?
»MFC tanulás
»Könyvet adok-veszek
»Hogy viszonyul ehhez a család?
»Nintendo wii
»Letölthető az új Rad Studio XE és Delphi XE
»Weblap véleményezés
»Játékmotor elmélet
»Informatikai bulvárlap
»Delphi-ről C++-ra váltás
» több téma
ASP  |  C#  |  C++  |  CSS  |  Delphi  |  Flash  |  HTML  |  Java  |  JavaScript  |  Pascal  |  Perl  |  PHP  |  Python  |  Visual Basic  |  Visual C++  |    »    

Tudástár

»

Webbrowser html forrása más különböző gépeken

»

Webbrowser html forrása más különböző gépeken

nyitotta: Mr_Pamacs, idő: 2010.03.08., moderátor: netangel
  Értesítés változás esetén Felvétel kedvencekhez Küldés emailben Nyomtatható verzió

Kategóriák:Programozási nyelvek » Delphi

Sorrend:
Időzóna:
Blokkméret:
Hi

Egy érdekes problémával találtam magam szemben.
Van egy program ami letölt egy html forrást (webbrowserbe betölt egy oldalt majd doc.completban kiszedi a forrást), és keres benne egy formnak az action linkjét. Ezt egy string alapján keresi mivel a formnak nincs neve és a sorszáma is változó lehet a lapon.

Így szedi ki:

doc:=WebBrowser.ControlInterface.Document;
Text:='';
Text:=doc.Body.InnerHTML;
keresendo:='<FORM action=';
              kilepo:=' ';
              DL:=-1;
              DL:=Pos(keresendo,Text);
              if DL<1 then
              begin
                keresendo:='<FORM method=post action=';
                DL:=-1;
                DL:=Pos(keresendo,Text);
                kilepo:='>';
              end;
dllink[0]:='';
              DL:=DL+length(keresendo);
              while ki do
                begin
                  dllink[0]:=dllink[0]+Text[DL];
                  inc(DL);
                  if Text[DL]=kilepo then
                  ki:=false;
                end;

Ez a kód már a javított vagyis mind a "2 fajta forráshoz" jó.

A kérdésem az lenne hogy mitől lehet az h ugyan annak az oldalnak, ugyan olyan operációs rendszeren (XP), más visszaadott forrása lehet?
Gondoltam arra h más az IE verziója. Esetleg valami DLL verzió különbség lenne?
És még egy ehhez kapcsolódó kérdés, mi a különbség a
doc:=WebBrowser.ControlInterface.Document;
és a
doc:=WebBrowser.OleObject.Document;
között.
Esetleg ez lehet a hiba forrása?
Szerintem a különböző IE verziók kavarnak be. Az IE6 és IE7 között elég nagy eltérés van, szerintem az lehet az oka.
Közben teszteltem párat. A jelen szempontból ControlInterface és OleObject között nincs különbség.
Az illetőnél 8-as, nálam 7-es IE van.

Ami érdekes volt még h ha nem jelentkeztünk be az oldalra akkor ugyan az a tartalom jött vissza, ha bejelentkeztünk akkor más.

Gondoltam már arra is h a szerver oldali php másképpen generálja le a kódot a IE7-nek és 8-nak, de ennek meg semmi értelme nem lenne.
Végülis lenne értelme, de szerintem nincs akkora különbség az IE7 és IE8 között, bár én ezt nem tudom olyan pontosan. Az biztos, hogy az Internet Explorer nem követi a szabványokat, tehát akár elképzelhető, hogy különbözne a legenerált kód.

Ajánlatom: Frissíts Te is IE8-ra, és nézd meg, hogy ugyanazt kapod-e. Elég valószínű, hogy igen. Konkrét megoldásom nincs, mert Firefoxot használok IE6 mellett, és nincs kedvem frissíteni.
Nem lehet, hogy az oldal a felhasználótól függően más és más tartalmat generál valamilyen oknál fogva? Pl. eltérő jogosultság, eltérő beállítás, stb.
Épp ezt írtam az előző hozzászólásomban, h ez is lehet de annak mi értelme lenne h:
<FORM method=post action=http....>
helyett
<FORM action=http... method=post>
ad vissza? Vagy lenne?
Így programozták le. Egyébként a böngésző szempontjából ez nem számít különbségnek és a feldolgozó kódot is úgy kéne megírni, hogy ez ne okozzon problémát, ha csak ennyi az eltérés!
Az a baj h a formnak nincs se id-je se neve, így nem tudom azonosítani csak szovegkereséssel. Még sorszám alapján sem mert más kódrészek tehetnek ki formokat elé.
Csak a submit gombnak van neve.

Am igazatok lett. Feltettem IE 8-at és az már ugy adja vissza a html kódot mint a "hibás" gépen. Így valószínűleg azzal van a gond.
Az megoldható h bár IE-8as van az adott gépen mégis mondjuk az IE7-esnek a motorját használja a program,a mellé csatolt DLL fájlokon keresztül? Így nem függene a program a user gépén lévő IE-től.
Miért nem írsz egy IE7 és egy IE8 változatot(és esetleg egy IE6) ? Tehát Registryből kiolvasod az IE verziót és lekezeled mindkét lehetőséget.
HKLM\SOFTWARE\Microsoft\Internet Explorer és Version érték kell neked.
Szerintem ez célszerűbb, mint az IE7 DLLjeit használni, mert honnan tudod, hogy van a gépen IE7 ? Lehet, hogy csak IE6 van.
Lehet nem túl szép megoldás, de én ezt használnám.
Nem tudod kihagyni webbrowsert és pl. IndyHTTP-vel leszedni az oldalt? Ekkor nem függesz IE-től.
Vagy szimplán bekapcsolod az IE8 kompatibilitás módját. Vagy pedig megkeresed a submit gombot és annak form-ját használod. Ha DOM-mal keresed meg, akkor a form-nál nem szabad hogy számítson már a tulajdonságok sorrendje.
Vagy stl megoldását továbbfűzve használhatnál egy WebBrowsert megjelenítésre, és Indyvel csinálnád a lényeget.
A baj az h Cookkie kezelés és hasonlók is vannak, ráadásul nem egy fajta oldalt kéne átírni hanem 10-et és mindegyiknél 3-4 oldal lekérés van. Sőt van amelyiknél JS kódot kell végrehajtani h elérjem a célomat, azt mg ha jól tudom Indy-n nem lehet.Meg akkor külön szálba kell tenni h ne fogja meg a fő progit. Szóval elég nagy munka, de ha nem lesz más út....
RSL ?
Ahha
És ha az ingyenes EmbeddedWb komponenst használnád? Úgy láttam, alapvetően a TWebBrowser "leszármazottja", és ebben már be lehet állítani UserAgent-et: megadnád pl az IE8-ét statikusan, így már valószínű, hogy minden oldal ugyanabban a formában jelenne meg.

Itt bővebben is beszéltek a témáról a komponenssel kapcsolatban.
Az oldal dinamikusan generalodhat szerveroldalon pl. cookie-k fuggvenyeben. Miutan letoltodott, javascript is beleturhat. Probalj az algoritmusoddal felkeszulni minnel tobb valtozatra.

A WebBrowser.ControlInterface az egy IWebBrowser interface, ami a mukodo activex cuccra hivatkozik.
A WebBrowser.OleObject pedig egy variant, amiben a fenti interface van. Szoval a vegeredmeny szempontjabol nincs kulonbseg, hogy melyikbol szeded ki a .Document-et.

Meg tudsz DOM-al is keresni: pl: document.all.item('Paint').innerHtml


Végülis a tiédet fogadtam el, mert ugy néz ki azzal már jó. Meg más problémákat is megoldott az a komponens nekem.
Belépés
E-mail cím:
Jelszó:

RSS források
-Hírek
-Cikkek
-Fórumok
-Állás/munka
Top pontgyűjtők
»Micu1.030
»Interlock280
»mezofi150
»Pitta_100
»Frostech0100
»szbzs.2100
»Hack100
»Riha60
»Akhiles50
»mrchandra50
Top wikieditorok
»Sting
»Doi
»FlamingClaw
»Argathron
»Csaboka2
»Vodka
»Joexy
»Ivn
»Balucinho
»Kelemzol
» ugrás a wikire
A nap kifejezései
»Algoritmus
»Hogyan kezdjem el
»Perl
» ugrás a wikire
Hírek
»Megérkezett a PostgreSQL 9.0 kiadásra jelölt változata
»Letölthető az új Rad Studio XE és Delphi XE
»Function-X digitális művészeti találkozó és demoscene party
»Webfejlesztőknek szóló közösségi oldalt indított a Microsoft
»Letölthető a hardvergyorsított Chrome 7 első fejlesztői kiadása
» több hír
PC Fórum hírek
»Itt az első kép az AMD nyolcmagos processzoráról
»"Szuperdizájnos" érintő-egeret mutatott be a Microsoft
»Szabadalmaztatta a számítógép kikapcsolását a Microsoft
»Vírusriadót váltott ki a webezőknél a Google
»Ingyen iWiW-ezhetnek mobiljaikról a T-Mobile-osok
»Automatikusan kiválogatja legfontosabb leveleink a Google
»OOo4Kids - ingyenes Office csomag gyerekeknek
»Új, gyorsabb Core i3 és Pentium processzorokat jelentett be az Intel
Tagi blogok
»PSP
»Első Programozó
»USB
»PHP, mint sablonmotor egyszerűen