2017-08-20 1 views
2

Ich habe Code mit VBA geschrieben, um alle Filmnamen von einer bestimmten Webseite aus einer Torrent-Site zu erhalten. Durch Drücken von "F8" konnte ich jedoch feststellen, dass der Code gut funktioniert und die Ergebnisse druckt, bis das letzte Ergebnis von dieser Seite erreicht wird. Sobald es den letzten zu analysierenden Namen erreicht, stürzt das Programm ab. Ich habe es mehrmals getan und die gleichen Konsequenzen erlitten. Wenn VBA diese CSS-Selektor-Methode nicht unterstützt, wie kann ich dann Ergebnisse vor dem letzten sammeln? Gibt es einen Verweis in der Bibliothek oder etwas anderes vor der Ausführung hinzuzufügen? Jede Hilfe wird sehr geschätzt.Kann querySelector in VBA nicht ordnungsgemäß verwenden

Hier ist der Code, den ich geschrieben habe:

Sub Torrent_data() 

    Dim http As New XMLHTTP60, html As New HTMLDocument 
    Dim movie_name As Object, movie As Object 

    With http 
     .Open "GET", "https://www.yify-torrent.org/search/1080p/", False 
     .send 
     html.body.innerHTML = .responseText 
    End With 

    Set movie_name = html.querySelectorAll("div.mv h3 a") 

    For Each movie In movie_name 
     x = x + 1: Cells(x, 1) = movie.innerText 
    Next movie 

End Sub 
+0

Jede Fehlermeldung? –

+0

Nach der Ausführung ist das, was ich sehe https://www.dropbox.com/s/gi21z95cmtzd12m/ima.jpg?dl=0 Es funktioniert nur teilweise, wenn ich den Code mit "F8" debuggen, wie ich in meinem Beitrag sagte. – SIM

Antwort

2

Try this:

Sub Torrent_data() 

    Dim http As New XMLHTTP60, html As New HTMLDocument, x As Long 

    With http 
     .Open "GET", "https://www.yify-torrent.org/search/1080p/", False 
     .send 
     html.body.innerHTML = .responseText 
    End With 

    Do 
    x = x + 1 
    On Error Resume Next 
    Cells(x, 1) = html.querySelectorAll("div.mv h3 a")(x - 1).innerText 
    Loop Until Err.Number = 91 

End Sub 
+0

Was ist los mit dir, Tehscript? Warum kann ich dich nicht besiegen? Du bist immer der Lebensretter. Übrigens, was war falsch an meinem Code? Thanksssssssssssssssssss viel. – SIM

+1

Ich weiß es wirklich nicht. Es könnte ein interner Fehler sein. Versuchen Sie 'exit sub' oder' exit for' in die 'for each'-Schleife zu setzen, löschen Sie alles andere darin. Sie werden sehen, dass es immer noch abstürzt. Das hat mich glauben lassen, dass das Problem mit 'für jede' Schleife zusammenhängt, also habe ich es losgeworden, und hier sind wir. – Tehscript

+0

Sie sind wirklich das Juwel eines Mannes. – SIM

2

der Code ein Element nach dem letzten Film, den Fehler verursacht ruft so

dieses zusätzliche Element for each ... kann nicht verwendet werden

nicht sicher warum ... noch ... . Aktualisiert

Sub Torrent_data() 

    Dim http As New XMLHTTP60, html As New HTMLDocument 
    Dim movie_name As Object, movie As Object 

    With http 
     .Open "GET", "https://www.yify-torrent.org/search/1080p/", False 
     .send 
     html.body.innerHTML = .responseText 
    End With 

    Set movie_name = html.querySelectorAll("div.mv h3 a") 

    Dim i As Integer 
    For i = 0 To movie_name.Length - 1 
     Cells(x + i, 1) = movie_name(i).innerText 
    Next i 

End Sub 
+0

Danke jsotola für Ihre Lösung. Ihr Code läuft auch einwandfrei. – SIM

0

sieht aus wie querySelectorAll ein Problem irgendeiner Art hat

das Objekt html.querySelectorAll(".mv h3 a") kann nicht in Überwachungsfenster untersucht werden.

versucht, so stürzt zu tun, Excel oder Word (i beide versucht)

versucht, andere Tags, das gleiche Resultat

Sub Torrent_data() 

    Dim http As New XMLHTTP60, html As New HTMLDocument 
    Dim movie_name As Object, movie As Object 

    With http 
     .Open "GET", "https://www.yify-torrent.org/search/1080p/", False 
     .send 
     html.body.innerHTML = .responseText 
    End With 

' Set movie_name = html.querySelectorAll("div.mv h3 a") ' querySelectorAll crashes VBA when trying to examine movie_name object 

    Set movie_name = html.getElementsByClassName("mv")  ' HTMLElementCollection 

    For Each movie In movie_name 
     x = x + 1: Cells(x, 1) = movie.getElementsByTagName("a")(1).innerText 
    Next movie 

' HTML block for each movie looks like this 

' <div class="mv"> 
'  <h3> 
'   <a href='/movie/55346/download-smoke-1995-1080p-mp4-yify-torrent.html' target="_blank" title="Smoke (1995) 1080p">Smoke (1995) 1080p</a> 
'  </h3> 
'  <div class="movie"> 
'   <div class="movie-image"> 
'    <a href="/movie/55346/download-smoke-1995-1080p-mp4-yify-torrent.html" target="_blank" title="Download Smoke (1995) 1080p"> 
'     <span class="play"><span class="name">Smoke (1995) 1080p</span></span> 
'     <img src="//pic.yify-torrent.org/20170820/55346/smoke-1995-1080p-poster.jpg" alt="Smoke (1995) 1080p" /> 
'    </a> 
'   </div> 
'  </div> 
'  <div class="mdif"> 
'   <ul> 
'    <li><b>Genre:</b>Comedy</li><li><b>Quality:</b>1080p</li><li><b>Screen:</b>1920x1040</li><li><b>Size:</b>2.14G</li><li><b>Rating:</b>7.4/10</li><li><b>Peers:</b>2</li><li><b>Seeds:</b>0</li> 
'   </ul> 
'   <a href="/movie/55346/download-smoke-1995-1080p-mp4-yify-torrent.html" class="small button orange" target="_blank" title="Download Smoke (1995) 1080p YIFY Torrent">Download</a> 
'  </div> 
' </div> 

End Sub 
Verwandte Themen