2017-06-14 5 views
0

Ich versuche, eine Webquery arbeiten zu lassen, aber es scheint, wird es einfach nicht. Mein Ziel ist es, den Quellcode einer Webseite zu scrappen. Leider scheint die Seite verschiedene Frames zu haben, weshalb mein Code nicht richtig funktioniert. Deshalb habe ich versucht, einen Code zu ändern, den ich online gefunden habe, der das Rahmenproblem lösen sollte. Das Problem ist, dass der Code nicht funktioniert, vielleicht weil er etwas älter zu sein scheint. Kann mir jemand helfen?VBA - Web-Abfrage - mehrere Frames

Der folgende Code erstellt Fehler (objecet erforderlich) an: "Set profileFrame .document.getElementById (" profileFrame ")"

Public Sub IE_Automation()

'Needs references to Microsoft Internet Controls and Microsoft HTML Object Library 

Dim baseURL As String 
Dim IE As InternetExplorer 
Dim HTMLdoc As HTMLDocument 
Dim profileFrame As HTMLIFrame 
Dim slotsDiv As HTMLDivElement 

'example URL with multiple frames 
baseURL = "https://www.xing.com/search/members?section=members&keywords=IT&filters%5Bcontact_level%5D=non_contact" 

Set IE = New InternetExplorer 
With IE 
    .Visible = True 

    'Navigate to the main page 

    .navigate baseURL & "/publictrophy/index.htm?onlinename=ace_anubis" 
    While .Busy Or .readyState <> READYSTATE_COMPLETE: DoEvents: Wend 

     'Get the profileFrame iframe and navigate to it 

     Set profileFrame = .document.getElementById("profileFrame") 

     .navigate baseURL & profileFrame.src 
     While .Busy Or .readyState <> READYSTATE_COMPLETE: DoEvents: Wend 

      Set HTMLdoc = .document 
     End With 

     'Display all the text in the profileFrame iframe 

     MsgBox HTMLdoc.body.innerText 

     'Display just the text in the slots_container div 

     Set slotsDiv = HTMLdoc.getElementById("slots_container") 
     MsgBox slotsDiv.innerText 

    End Sub 

Best wishes, Andreas

Antwort

0

Hmmmm, ich bin mir nicht ganz sicher, was Sie hier tun, aber können Sie den unten stehenden Code ausprobieren?

Option Explicit 

Sub Sample() 
    Dim ie As Object 
    Dim links As Variant, lnk As Variant 
    Dim rowcount As Long 

    Set ie = CreateObject("InternetExplorer.Application") 
    ie.Visible = True 
    ie.navigate "https://www.xing.com/search/members?section=members&keywords=IT&filters%5Bcontact_level%5D=non_contact" 

    'Wait for site to fully load 
    'ie.Navigate2 URL 
    Do While ie.Busy = True 
     DoEvents 
    Loop 

    Set links = ie.document.getElementsByTagName("a") 

    rowcount = 1 

    With Sheets("Sheet1") 
     For Each lnk In links 
     'Debug.Print lnk.innerText 
      'If lnk.classname Like "*Real Statistics Examples Part 1*" Then 
       .Range("A" & rowcount) = lnk.innerText 
       rowcount = rowcount + 1 
       'Exit For 
      'End If 
     Next 
    End With 
End Sub 
+0

Hallo ryguy72 und vielen Dank! Leider bekomme ich einen Fehler "unserer Reichweite". Ich machte eine Arbeit für das Problem und ich benutze nun imacros chrome-Plugin, um den Inhalt zu verschrotten und dann über VBA in Excel importieren. Aber natürlich wäre ein direkter Weg wahrscheinlich viel bequemer. Viele Grüße Andreas – Andreas

+0

Wenn Sie durch den Code gehen, indem Sie immer wieder F8 drücken, wo tritt der Fehler "unsere Reichweite" auf? Welche Zeile wirft den Fehler auf? Das sollte ein Hinweis sein. Obwohl, ich kann nicht vermuten, wo der Fehler wäre? Ich sehe nichts Verdächtiges und alles hat gut für mich funktioniert. – ryguy72