Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Delphi Webbrowser JavaScript

319 views
Skip to first unread message

kons...@wp.pl

unread,
Jan 10, 2017, 3:57:36 AM1/10/17
to
Delphi XE2

Strona Portal podatkowy MF sprawdzanie VAT

fragment strony
https://ppuslugi.mf.gov.pl/

<li class="SidebarLink"><a title="" class="SidebarLink SidebarLinkChVAT"
onclick="FWDC.executeAction(1005, null, 'FLOW');"
href="javascript:;">Sprawdź podmiot w VAT</a></li>


Jak z poziomu Delphi w WebBrowser1DocumentComplete symulować kliknięcie
w ten link i przejść do niego?

---
Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast.
https://www.avast.com/antivirus

kons...@wp.pl

unread,
Jan 11, 2017, 4:08:31 AM1/11/17
to
Próbuję przeszukiwać Dokument tak:

Doc := WebBrowser1.Document as IHTMLDocument2;
allLinks := Doc.all;
Memo1.Lines.Clear;
for i :=0 to allLinks.length-1 do
begin
firstLink := allLinks.Item(i,'') as IHTMLElement;
if firstLink.className='PageWrapper' then
begin
allLinks:=firstLink.Get_all AS IHTMLElementCollection;
break;
end;
end;
for i :=0 to allLinks.length-1 do
begin
//try
firstLink := allLinks.Item(i,'') as IHTMLElement;
//listall(firstLink.Get_all AS IHTMLElementCollection);
if firstLink.className='ContentWrapper' then
begin
allLinks:=firstLink.Get_all AS IHTMLElementCollection;
break;
end;
end;
for i :=0 to allLinks.length-1 do
begin
try
firstLink := allLinks.Item(i,'') as IHTMLElement;

if firstLink.ID='FAST_MANAGER_PLACEHOLDER' then
begin
listall(firstLink.Get_all AS IHTMLElementCollection);
url1:=firstLink.toString;
//allLinks:=firstLink.Get_all AS IHTMLElementCollection;
break;
end;
except
end;
end;

Wynik listowania:
1-pętla
[object HTMLDivElement] title ---- className --PageWrapper-- ID ----
tagname --DIV--

2-pętla
[object HTMLDivElement] title ---- className --ContentWrapper-- ID ----
tagname --DIV--
<div class="ContentWrapper">
<noscript>&lt;div class="NoScript"&gt;Javascript must be enabled to
use this site.&lt;/div&gt;</noscript><script
type="text/javascript">FWDC.setVerLast('1._.fkgudDs1XuqrlNK9nTmwotpnlFs1',
'HTML: _ [Page,443036130] @ 2017-01-11 09:52:28.6655')
</script><script>FWDC.loadManager();</script>
<div id="FAST_MANAGER_PLACEHOLDER"></div>

<div class="clearer"></div>
</div>



---- listall
length 0


---- listall

[object HTMLDivElement] title ---- className ---- ID
--FAST_MANAGER_PLACEHOLDER-- tagname --DIV-- type
<div id="FAST_MANAGER_PLACEHOLDER"></div>




W ostatniej pętli Dostaję FAST_MANAGER_PLACEHOLDER a powinienem dostać
id="MANAGER_CONTAINER__0"
lub
class="ManagerContainer ManagerContainer_Fast_TAP NonLoggedOn
HasNavigation SidebarPinned"

To widzę w InternetExplorer gdy nacisnę "Sprawdź element" z menu.

<div tabindex="100" title="" class="ManagerContainer
ManagerContainer_Fast_TAP NonLoggedOn HasNavigation SidebarPinned"
id="MANAGER_CONTAINER__0">

Co to za technika ukrywania i jak to obejść?

zpksoft

unread,
Jan 11, 2017, 4:08:53 AM1/11/17
to
Myślę, że jest kilka dróg. Najprościej bezpośrednio do html-a przed wczytaniem do webbrowsera wstrzyknąć taki kod (od razu się wykona):

<script>
FWDC.executeAction(1005, null, 'FLOW');
</script>

Paweł

kons...@wp.pl

unread,
Jan 11, 2017, 4:09:40 AM1/11/17
to
Nie napisałem,
w Webbrowser widzę prawidłową stronę i mogę wykonywać wszystkie operacje.

zpksoft

unread,
Jan 11, 2017, 4:15:22 AM1/11/17
to
W dniu środa, 11 stycznia 2017 10:08:31 UTC+1 użytkownik kons...@wp.pl napisał:
> Próbuję przeszukiwać Dokument tak:
>
> Doc := WebBrowser1.Document as IHTMLDocument2;
> allLinks := Doc.all;
>ciach

Straszny kod (jak dla mnie :)
Szukająć łączy wyodrębnił bym "ręcznie" podciągi z html-a:

od href="

do "


Paweł

kons...@wp.pl

unread,
Jan 11, 2017, 4:27:25 AM1/11/17
to

> Straszny kod (jak dla mnie :)
Błądzę i próbuję przeszukiwać na ślepo.


> Szukająć łączy wyodrębnił bym "ręcznie" podciągi z html-a:
>
> od href="
>
> do "
>
Problem w tym że linki za każdym razem są inne

https://ppuslugi.mf.gov.pl/_/#10
https://ppuslugi.mf.gov.pl/_/#12
itd.
to z paska przeglądarki



dodatkowo na stronie docelowej
przycisk jest w HTML tak:
<button name="b-8" tabindex="100" class="EnabledLink ShowInvalidLink"
id="b-8" style="width: 150px; height: 22px;"
onclick="FWDC.eventOccurred(event, 'b-8'); return false;"
type="button">Sprawdź</button>

oczywiście
WebBrowser1.OleObject.Document.GetElementByID('b-8').Click;
nie działa.

dobrze że działa chociaż
WebBrowser1.OleObject.Document.getElementById('b-7').value:='XXXXXXXXXX';

przy HTML
<input name="b-7" tabindex="100" title="" class="FieldEnabled
FieldRequired DocControlMask watermark" id="b-7"
aria-describedby="qtip-11" style="width: 150px; height: 22px;"
onkeydown="FWDC.onDocFieldKeyDown(this, event);"
onfocus="FWDC.onDocFieldGotFocus(this, event);"
onblur="FWDC.onDocFieldLostFocus(this, event);" type="text" value=""
autocomplete="off" data-hasqtip="11" oldtitle="Pole
wymagane&#10;&#10;Format:9999999999">

kons...@wp.pl

unread,
Jan 11, 2017, 5:21:24 AM1/11/17
to

> dodatkowo na stronie docelowej
> przycisk jest w HTML tak:
> <button name="b-8" tabindex="100" class="EnabledLink ShowInvalidLink"
> id="b-8" style="width: 150px; height: 22px;"
> onclick="FWDC.eventOccurred(event, 'b-8'); return false;"
> type="button">Sprawdź</button>
>
> oczywiście
> WebBrowser1.OleObject.Document.GetElementByID('b-8').Click;
> nie działa.
najlepsze jest że go znajduje ale nie działa click

kod
doc := webbrowser1.Document as IHTMLDocument2;
WebBrowser1.OleObject.Document.getElementById('b-7').value:='XXXXXXXXXX';

klik:= doc.all.item('b-8',0) as IHTMLElement;
ShowMessage(klik.className);
klik.click;
pokazuje prawidłową nazwę klasy.

kons...@wp.pl

unread,
Jan 11, 2017, 5:34:12 AM1/11/17
to

> Myślę, że jest kilka dróg. Najprościej bezpośrednio do html-a przed wczytaniem do webbrowsera wstrzyknąć taki kod (od razu się wykona):
>
> <script>
> FWDC.executeAction(1005, null, 'FLOW');
> </script>
>
W przeglądarce pokazując źródło strony widzę od razu <div
id="FAST_MANAGER_PLACEHOLDER"></div>

mógłbyś podpowiedzieć w które miejsce wstrzyknąć?
Jako pierwsze w body?

kons...@gmail.com

unread,
Jan 11, 2017, 6:23:23 AM1/11/17
to

> od href="
>
> do "
>
>

Ale tam jest
href="javascript:;"
więc na pewno nie o to chodzi

zpksoft

unread,
Jan 11, 2017, 1:38:44 PM1/11/17
to
Na samym końcu, przed </body>

Strona się załaduje a następnie wykona ten kod.
0 new messages