Autore Topic: WebBrowser: Come controllare i link all'interno di una pagina?  (Letto 1965 volte)

Offline zoff

  • Gamberetto
  • *
  • Post: 1
    • Mostra profilo
Salve,
sono alle prime armi e sto cercando di creare un programmino in Gambas che utilizzi il componente Webbrowser per controllare die link all'interno di pagine web.
Un esempio di utilizzo sarebbe eseguire automaticamente una ricerca su google e controllare i primi risultati...

Fino ad implementare il componente e arrivare alla pagina di Google ci sono, ora però non ho davvero idea di come:
1. immettere testo nella textbox di ricerca della pagina
2. Simulare il click del pulsante per avviare la ricerca
3. Controllare i link visualizzati nell'esito

E' possibile farlo?
Se non è possibile sapete indicarmi delle soluzioni alternative a Gambas che però non mi costringano a scrivere tutto il codice per simulare un WebBrowser?
Sempre in caso negativo, potrebbe essere una buona proposta per estensioni future del componente?

ciauz

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: WebBrowser: Come controllare i link all'interno di una pagina?
« Risposta #1 il: 12 Settembre 2008, 21:49:58 »
considera questo:

per avviare una ricerca su google devi dare a webbroser un link contenente l' indirizzo in cui è presente la query di ricerca,

la query esatta non la so

ti dico questo perchè io ho usato questo sistema per utilizzare il traduttore di google

ti posto il prog che ti aiuta a capire anche se è solo abbozzato


il problema vero e proprio e riuscire a leggere il contenuto della pagina di web browser da codice!

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: WebBrowser: Come controllare i link all'interno di una pagina?
« Risposta #2 il: 01 Marzo 2013, 02:04:31 »

il problema vero e proprio e riuscire a leggere il contenuto della pagina di web browser da codice!

...utilizzando, con Gambas 3, la proprietà .Text dell'oggetto WebView.

Ad esempio, per ottenere soltanto le righe della traduzione, si potrebbe, al tuo progetto "Traduttore", ipotizzare un codice aggiuntivo come il seguente:
Codice: gambas [Seleziona]

Public Sub Button2_Click()

   Dim ss As String[]
   Dim sh, sh2 As Short

  ss = Split(Web1.Text, "\n")
  
  For sh = 0 To ss.Max

    If ss[sh] Like "TraduttoreDa:*" Then
      For sh2 = sh + 6 To ss.Max - 2
        Print Trim(ss[sh2])
      Next
    Endif
  
  Next

End
« Ultima modifica: 01 Marzo 2013, 02:23:11 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re: WebBrowser: Come controllare i link all'interno di una pagina?
« Risposta #3 il: 02 Marzo 2013, 19:20:14 »
il problema vero e proprio e riuscire a leggere il contenuto della pagina di web browser da codice!

Ora mi espongo e forse non dovrei visto che mai nemmeno l'ho usato, il controllo. Ma non e' che semplicemente uno puo' caricarci la pagina e scorrere il DOM per vedere se e quali link ci sono? Al limite, uno puo' inserire il codice javascript, tipo

Codice: [Seleziona]
var lista = document.getElementsByTagName(“a”);

nella pagina, dopo averla scaricata, ricomporla per rileggerla e creare la lista dei link, se il componente non lo permettesse, ci sono tanti esempi del codice da usare che si trovano googlando, comunque mi sa che il componente gia' lo fa.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: WebBrowser: Come controllare i link all'interno di una pagina?
« Risposta #4 il: 02 Marzo 2013, 19:34:40 »

Ora mi espongo e forse non dovrei visto che mai nemmeno l'ho usato, il controllo. Ma non e' che semplicemente uno puo' ...

Perché non fai qualche prova ? In caso di risultato positivo potresti esporre l'esperimento ed il codice utilizzato.  :-\
« Ultima modifica: 02 Marzo 2013, 19:42:28 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re: WebBrowser: Come controllare i link all'interno di una pagina?
« Risposta #5 il: 02 Marzo 2013, 20:30:58 »
Perché non fai qualche prova ?

Perche' non l'ho mai usato, come faccio a sapere se e' la strada migliore? In ogni caso, avevo capito che lui voleva vedere i collegamenti "puliti" dopo la ricerca su Google, e forse potrebbe, senza usare dom

recuperare la pagina
aggiungere il necessario javascript in fondo alla pagina, sostituendo il </body> con il testo dello script piu' ancora </body>
ricaricare la pagina.

A quel punto, se prende il testo del controllo, ha gia' tutti i collegamenti.
Fai una prova per esempio con questo banalissimo file html

Codice: [Seleziona]
<!DOCTYPE html>
<html>
<head>
</head>
<body>

<a href='/posts/2008/01/20/check_mp3_for_hash_size.html'>Check Mp3 For Hash</a><br>
<a href='/posts/2008/03/22/convertire_wma_in_mp3.html'>Convertire Wma In Mp3</a><br>

<script>
if(document.getElementsByTagName) {
 document.writeln(">>><br>")
 for(i=0; i < document.getElementsByTagName("A").length; i++)
  document.writeln(document.getElementsByTagName("A")[i]+"<br>");
}
</script>
</body>

</html>

Se gli fai stampare anche le righe per mettere i risultati in un div nascosto (basta aggiungerle allo script), nemmeno le vedi, ma con la proprieta' .text dovrebbe essere facile recuperare tutto.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: WebBrowser: Come controllare i link all'interno di una pagina?
« Risposta #6 il: 04 Marzo 2013, 16:36:55 »
E' una soluzione interessante.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: WebBrowser: Come controllare i link all'interno di una pagina?
« Risposta #7 il: 12 Marzo 2013, 02:34:20 »
Caro pastrano,

la tua soluzione ogni tanto mi richiamava, e sono tornato più volte a vederla...

Per integrare la tua soluzione con Gambas, diciamo che avrei immaginato questa seguente ipotesi di codice (è necessario attivare anche il componente gb.qt4.webkit, e porre sul Form una WebView):   :-[
Codice: [Seleziona]
Private js As String


Public Sub Form_Open()

  js = "\n\n<script>" &
  "if(document.getElementsByTagName) {\n" &
  "document.writeln(\">>><BR>\")\n" &
  "for(i=0; i < document.getElementsByTagName(\"A\").length; i++)\n" &
  "document.writeln(document.getElementsByTagName(\"A\")[i]+\"<BR>\");}\n" &
  "</script>"
  
   WebView1.Url = "http://www.indirizzo_web.xx"

End


Public Sub Button1_Click()

   Dim s As String
   Dim j As Integer

     j = RInStr(WebView1.HTML, "</html>", 1, gb.IgnoreCase)

     s = Left(WebView1.HTML, j - 1) & js & Mid(WebView1.HTML, j + 7, Len(WebView1.HTML))

     File.Save("/tmp/s.html", s)
  
     WebView1.Url = "/tmp/s.html"

End
   :-X


Devo dirti, pastrano, che mi pare tu abbia dato una buona soluzione.    :coder:
« Ultima modifica: 12 Marzo 2013, 11:41:41 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re: WebBrowser: Come controllare i link all'interno di una pagina?
« Risposta #8 il: 12 Marzo 2013, 19:58:00 »
buona soluzione.

Non esagerare: non e' molto elegante, magari ha il vantaggio di demandare al motore del browser la "traduzione" dei link, che possono essere scritti anche malissimo, su piu' righe, e ora che mi viene in mente, potrebbero essere anche "escapati" (in quel caso c'e' l'apposita funzione di javascript). Tieni conto, pero', che io attualmente non lo posso provare, che sono trattenuto dalla versione attuale sulla Debian, ma sembrerebbe che dalla versione 3.4 si possa analizzare il DOM della pagina da codice.

http://gambasdoc.org/help/comp/gb.qt4.webkit/webelement?it&v3

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: WebBrowser: Come controllare i link all'interno di una pagina?
« Risposta #9 il: 13 Marzo 2013, 00:01:17 »
Un'altra modalità, ma più spicciola, potrebbe essere la seguente:
Codice: gambas [Seleziona]

Public Sub Form_Open()

   WebView1.Url = "http://www.indirizzo_pagina_web.xx"

End


Public Sub Button1_Click()

  Dim ss As String[]
  Dim s As String

   ss = Split(Lower(WebView1.HTML), " ", "", True)

    For Each s In ss

      If s Like "href=\"*" Then
        s = Replace(s, "href=", "")
        Print = Left(s, RInStr(s, "\""))
      Endif

    Next

End
  :-\
« Ultima modifica: 13 Marzo 2013, 00:28:17 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »