vb.net Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt (Webbrowser)

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von NoIde.

    vb.net Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt (Webbrowser)

    Hallo liebe community,

    ich wollte mir eine kleine Wetter App zusammen basteln.
    Soweit so gut.. Doch wenn ich die Daten von der Webseite abrufen will (in dem fall von Google < Beispiel) bekomm ich immer den Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    Also ich glaube das dieser Fehler früher sonst nie kam... Hmm hier mal mein Code:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private weatherbrowser As New WebBrowser
    2. Private Sub change_location_btn_Click(sender As Object, e As EventArgs) Handles change_location_btn.Click
    3. My.Settings.Location = InputBox("Gebe hier deinen Standort ein (Der aktuelle Standort ist: " & My.Settings.Location & ")", "Neuen Standort")
    4. My.Settings.Save()
    5. GetNowWeatherInfos()
    6. End Sub
    7. Private Sub Weather_UC_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    8. weatherbrowser.ScriptErrorsSuppressed = True
    9. AddHandler weatherbrowser.DocumentCompleted, AddressOf weatherbrowser_DocumentCompleted
    10. If My.Settings.Location = Nothing Then
    11. MessageBox.Show("Sie haben noch keinen gültigen Standort eingegeben.", "Wetter", MessageBoxButtons.OK, MessageBoxIcon.Information)
    12. Else
    13. GetNowWeatherInfos()
    14. End If
    15. End Sub
    16. Private Sub GetNowWeatherInfos()
    17. weatherbrowser.Navigate("https://www.google.de/search?q=Wetter%" & My.Settings.Location)
    18. End Sub
    19. Private Sub weatherbrowser_DocumentCompleted(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) 'Hier kommt der Fehler
    20. GetWeatherInfos.Start()
    21. Try
    22. Dim weather_image_str As String = weatherbrowser.Document.GetElementById("wob_tci").GetAttribute("src")
    23. Catch ex As Exception
    24. MessageBox.Show(ex.Message, "Error in Extension: Weather", MessageBoxButtons.OK, MessageBoxIcon.Error)
    25. End Try
    26. End Sub
    27. Private Sub GetWeatherInfos_Tick(sender As System.Object, e As System.EventArgs) Handles GetWeatherInfos.Tick 'Und hier kommt der Fehler
    28. Try
    29. Dim doc = weatherbrowser.Document
    30. Dim ort_str As String = doc.GetElementById("wob_loc").InnerText
    31. Dim last_refresh_str As String = doc.GetElementById("wob_dts").InnerText
    32. Dim weather_state_str As String = doc.GetElementById("wob_dcp").InnerText
    33. Dim grad_str As String = doc.GetElementById("wob_tm").InnerText
    34. Dim rain_str As String = doc.GetElementById("wob_pp").InnerText
    35. Dim air_str As String = doc.GetElementById("wob_hm").InnerText
    36. Dim air_speed_str As String = doc.GetElementById("wob_ws").InnerText
    37. GetWeatherInfos.Stop()
    38. Catch ex As Exception
    39. GetWeatherInfos.Stop()
    40. MessageBox.Show(ex.Message, "Error in Extension: Weather", MessageBoxButtons.OK, MessageBoxIcon.Error)
    41. End Try
    42. End Sub



    Danke im vorraus für die Hilfe!
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!

    ClonkAndre schrieb:

    Hmm hier mal mein Code:
    In welcher Zeile Deines Codes?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Oh dann hab ich wohl zu schwach Makiert^^
    Zeile 23, 32 wird in der Sub der Try Catch Block ausgelöst
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!
    @ClonkAndre Schmeiß das Try-Catch raus, denn wir wollen Fehler finden und nicht verschleiern.
    In welcher Zeile kommt nun die Exception?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Warum nicht einfach eine Wetter-Api nutzen anstatt gegen Google's AGBs zu verstossen? Automatisierte Suchanfragen, sind AFAIK nicht erlaubt.

    z.B.
    openweathermap.org/


    @ClonkAndre
    oder gleich die Daten vom deutschen Wetterdienst hohlen? Da gibt es die Daten seit einiger Zeit kostenlos.
    dwd.de/DE/klimaumwelt/cdc/cdc_node.html
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „NoIde“ ()

    @RodFromGermany
    Es kommt überall wo ich es im Code makiert habe eine: System.NullReferenceException
    (Habe es im Code mit einem " ' HIER " makiert)
    Also man kann sagen überall wo ich versuche auf die Daten zuzugreifen
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub weatherbrowser_DocumentCompleted(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
    2. GetWeatherInfos.Start()
    3. Dim weather_image_str As String = weatherbrowser.Document.GetElementById("wob_tci").GetAttribute("src") ' HIER
    4. 'MessageBox.Show(ex.Message, "Error in Extension: Weather", MessageBoxButtons.OK, MessageBoxIcon.Error)
    5. End Sub
    6. Private Sub GetWeatherInfos_Tick(sender As System.Object, e As System.EventArgs) Handles GetWeatherInfos.Tick
    7. Dim doc = weatherbrowser.Document
    8. Dim ort_str As String = doc.GetElementById("wob_loc").InnerText ' HIER
    9. Dim last_refresh_str As String = doc.GetElementById("wob_dts").InnerText ' HIER
    10. Dim weather_state_str As String = doc.GetElementById("wob_dcp").InnerText ' HIER
    11. Dim grad_str As String = doc.GetElementById("wob_tm").InnerText ' HIER
    12. Dim rain_str As String = doc.GetElementById("wob_pp").InnerText ' HIER
    13. Dim air_str As String = doc.GetElementById("wob_hm").InnerText ' HIER
    14. Dim air_speed_str As String = doc.GetElementById("wob_ws").InnerText ' HIER
    15. GetWeatherInfos.Stop()
    16. 'GetWeatherInfos.Stop()
    17. 'MessageBox.Show(ex.Message, "Error in Extension: Weather", MessageBoxButtons.OK, MessageBoxIcon.Error)
    18. End Sub



    @NoIde
    Wusste garnicht das das nicht erlaubt ist :X

    Wie kann ich mir denn da die Daten abzapfen?
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!

    ClonkAndre schrieb:

    Wie kann ich mir denn da die Daten abzapfen?


    Bei openweathermap lädst du z.B. eine XML oder einen Json runter, diesen verarbeitest du dann. Beim DWD, da waren es glaube ich CSV-Dateien, hatte mich ganz kurz mal mit den DWD-Daten beschäftigt, aber aus Zeitgründen nie weiter gemacht.

    Schau dich hier mal um.
    openweathermap.org/api

    Hier kannst direkt mal im Webbrowser testen:
    openweathermap.org/current


    ClonkAndre schrieb:

    Also man kann sagen überall wo ich versuche auf die Daten zuzugreifen


    Entweder gibt es das Element nicht, oder es hat kein src-Attribute(post 1 code zeile 26).
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „NoIde“ ()

    @ClonkAndre Setz einen Haltepunkt auf die Zeilen 3 und 8.
    Meine Wette: weatherbrowser.Document ist Nothing.
    Gugst Du hier: Debuggen, Fehler finden und beseitigen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @NoIde
    Entweder gibt es das Element nicht, oder es hat kein src-Attribute.

    Das komische ist, ich habe es immer so gemacht und es funktionierte sonst :/

    Aber danke, ich werde mich mal dran machen an der API.

    @RodFromGermany
    Meine Wette: weatherbrowser.Document ist Nothing.

    Jop, da haste Recht!

    Quellcode

    1. Dim weather_image_str As String = weatherbrowser.Document.GetElementById("wob_tci").GetAttribute("src")
    war auch Nothing.

    Aber wie auch schon geschrieben, ich habe es immer so gemacht und es klappte
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!

    VB1963 schrieb:

    Dann hat Google seine Wetterseite verändert...


    Oder google hat die automatisierten Queries festgestellt und liefert ihm die Captcha-Seite aus. Weiss man ja nicht ob der Browser sichbar ist und er es sieht. Benutzte mal durch's Tor-Netz google, da kommste auch schnell auf so eine Seite, bzw. google leitet dich dorthin. Goole's Algorythmen werden besser.

    Habe gerade auch gesehen, das er den Standart Webbrowser nutzt. Da hatte ich damals immer wieder Probleme mit JS, vllt. wird die Seite deswegen nicht richtig geladen, vllt. hat der TE auch die JS-Fehlermeldungen unterdrückt, so das er die FehlerMeldung nicht mitbekommt.

    ScriptErrorsSuppressed = True

    Jupp hat er.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „NoIde“ ()