Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Webbrowser - Estrazione src
Forum - C# / VB.NET - Webbrowser - Estrazione src

Avatar
Light (Normal User)
Newbie


Messaggi: 17
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 3:02
Venerdì, 27/06/2014
Salve, ho un problema.
Lavorando con il WebBrowser sono riuscito a prelevare un url di un'immagine con questo comando:

Dim theElementCollection As HtmlElementCollection

        theElementCollection = Webbrowser1.Document.GetElementsByTagName("img")


        For Each curElement As HtmlElement In theElementCollection

            If curElement.GetAttribute("src").ToString().Contains("660187210687117") Then


                PictureBox1.ImageLocation = curElement.GetAttribute("src").ToString()


                MsgBox(curElement.GetAttribute("src").ToString())
            End If
        Next

Codice Html della pagina:

<a class="coverWrap coverImage" href="https://www.facebook.com/photo.php?fbid=660187210687117& ..." rel="theater" ajaxify="https://www.facebook.com/photo.php?fbid=660187210687117& ...&src=https%3A%2F%2Fscontent-b-mxp.xx.fbcdn.net%2Fhphotos-xpf1%2Ft1.0-9%2F1656362_660187210687117_178605520_n.jpg&size=960%2C720&source=10&player_origin=events" title="Immagine di copertina" id="fbCoverImageContainer" data-cropped="1"><img class="coverPhotoImg photo img" src="https://scontent-b-mxp.xx.fbcdn.net/hphotos-xpf1/t1.0-9/165 ..." style="top:-231px;width:100%" data-fbid="660187210687117" alt="Immagine di copertina"><div class="coverBorder"></div><img class="coverChangeThrobber img" src="https://fbstatic-a.akamaihd.net/rsrc.php/v2/yk/r/LOOn0JtHNz ..." alt="" width="16" height="16"></a>

Praticamente ho estratto "src" tramite: "data-fbid="660187210687117"
È possibile estrarre direttamente l'url dell'immagine ovvero:

https://scontent-b-mxp.xx.fbcdn.net/hphotos-xpf1/t1.0-9/165 ..."

Tramite il nome della classe? Oppure è possibile estrarre il valore data-fbid?
Si può fare? Potete aiutarmi? Grazie in anticipo.

In rete ho trovato questo:

        For Each ele As HtmlElement In Webbrowser1.Document.All
            
            If ele.GetAttribute("src").ToLower.Contains(".jpg") Then
                Dim imgsrc As String = ele.GetAttribute("src")
                 MsgBox(imgsrc)
            End If
      
        Next

Però questo estrae tutte le immagini .jpg

PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 10:57
Venerdì, 27/06/2014
Non sono sicuro di aver capito esattamente cosa vuoi fare, comunque a quanto ho capito si tratta di estrarre l'immagine di copertina da una pagina/profilo facebook. In tal caso ti basta modificare il codice che hai postato in modo che controlli l'attributo class e non src:
Codice sorgente - presumibilmente Delphi

  1. If curElement.GetAttribute("class") = "coverPhotoImg photo img" Then
  2.                 PictureBox1.ImageLocation = curElement.GetAttribute("src").ToString()
  3.                 MsgBox(curElement.GetAttribute("src").ToString())
  4.             End If


PM Quote
Avatar
Light (Normal User)
Newbie


Messaggi: 17
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 17:45
Venerdì, 27/06/2014
Così?

Dim theElementCollection As HtmlElementCollection

        theElementCollection = Webbrowser1.Document.GetElementsByTagName("img")


        For Each curElement As HtmlElement In theElementCollection

           If curElement.GetAttribute("class") = "coverPhotoImg photo img" Then
                PictureBox1.ImageLocation = curElement.GetAttribute("src").ToString()
                MsgBox(curElement.GetAttribute("src").ToString())
            End If
        Next
Non funziona, dove sbaglio?

Ultima modifica effettuata da Light il 27/06/2014 alle 17:56
PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 20:05
Venerdì, 27/06/2014
Strano, a me sembra giusto. Controlla che il valore dell'attributo class sia effettivamente quello (se hai copiaincollato il codice che ti ho postato potrebbe non essere esatto dato che l'ho scritto di fretta); se non dovessi risolvere, prova a fare un po' di debug per scoprire perchè non lo trova

Ultima modifica effettuata da GN il 27/06/2014 alle 20:17
PM Quote
Avatar
Light (Normal User)
Newbie


Messaggi: 17
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 20:25
Venerdì, 27/06/2014
Niente non funziona

PM Quote
Avatar
Uno sciame di API (Member)
Pro


Messaggi: 66
Iscritto: 10/07/2012

Segnala al moderatore
Postato alle 13:07
Sabato, 28/06/2014
@GN Il codice sembra giusto anche a me, credo si tratti più di un bug del controllo WebBrowser che un errore nel codice :)
Per quanto riguarda il problema, visto che GetAttribute("class") non ritorna alcun valore, si può risolvere con il codice:
Codice sorgente - presumibilmente VB.NET

  1. Dim images As System.Windows.Forms.HtmlElementCollection
  2. images = WebBrowser1.Document.GetElementsByTagName("img")
  3. For Each Img As System.Windows.Forms.HtmlElement In images
  4.         If Img.OuterHtml.Contains("class=""coverPhotoImg photo img""") Then
  5.                 PictureBox1.ImageLocation = Img.GetAttribute("src")
  6.                 Exit For
  7.         End If
  8. Next


inserito nell'evento DocumentCompleted del controllo WebBrowser. Non credo ci sia bisogno di alcuna spiegazione sul codice in quanto è molto semplice :k:
Spero di essere stato di aiuto :)

PM Quote
Avatar
Light (Normal User)
Newbie


Messaggi: 17
Iscritto: 25/05/2012

Segnala al moderatore
Postato alle 17:01
Sabato, 28/06/2014
Grazie,funziona ;)

PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 20:48
Sabato, 28/06/2014
Hai ragione, cercando un po' ho appena scoperto che usare getAttribute per la classe crea problemi anche ad altri: http://social.msdn.microsoft.com/Forums/vstudio/en-US/78ba ...

PM Quote