2016-06-23 12 views
-1

Ich habe diese Situation, die ich ohne Glück zu lösen kämpfen. Ich verwende VBA in Excel, um zu einer Website zu navigieren. Auf dieser Website verwende ich VBA, um auf ein div mit ID id-01 zu klicken, was gut funktioniert. Klicken Sie auf das div#id-01 wird ein anderes div mit ID id-02 erzeugen, möchte ich auf dieses div klicken. Wie kann ich auf das div mit id-02 mit VBA klicken?VBA Klicken Sie auf dynamisch generierte Div mit ID

Set IE = CreateObject("InternetExplorer.Application") 
' 
'code to navigate to site and wait for site to load 
' 

'Get div#id-01 and click on it 
Set first = IE.document.getElementById("id-01") 

'click it 
first.click 

'The following code does not work because 
Set second = IE.document.getElementById("id-02") 

second.click 
+0

Vielleicht anstelle von Element-ID Sie [Tagname] verwenden könnte (https://msdn.microsoft.com/en-us/library/ms536439 (v = VS.85) .aspx)? Scheint so, als würde dies als "Kind" von id-01 behandelt werden, anstatt nur auf id-01 und dann auf id-02 zu klicken. – Sgdva

+0

Nachdem die Seite fertig ist und bevor ich auf "div # id-01" klicke, gibt es kein ' div # id-02'. Ich denke, es würde nicht anders sein, wie du auf "div # id-01" als untergeordnetes Element von "div # id-01" beziehst oder es als Ziel-ID verwendest, weil das Objekt "ID.document" nicht über das Vorhandensein von 'aktualisiert wird div # id-02', wenn das Objekt über id-02 wüsste, hätte der obige Code funktionieren müssen. –

+0

Mögliches Duplikat davon: http://stackoverflow.com/questions/11820548/is-there-a-way-in-vba-to-get-elements-produced-by-javascript. Der Hinweis lautet "Application.Wait Now + TimeSerial (0,0, x)" zwischen 'first.click' und' Set second = ... 'wobei' x' eine bestimmte Anzahl von Sekunden ist. –

Antwort

0

Ich setze das Dokument im Allgemeinen zurück, nachdem das neue Element vom ersten hinzugefügt wurde.

Versuchen Sie folgendes:

Set IE = CreateObject("InternetExplorer.Application") 

    ' 
    'code to navigate to site and wait for site to load 
    ' 
    set myDoc = IE.Document 

    Set first = myDoc.getElementById("id-01") 

    'click it 
    first.click 


    (WAIT 2 seconds) 

    set myDoc = IE.Document 

    Set second = IE.document.getElementById("id-02") 

    second.click[/code]