Form con web browser

di il
9 risposte

Form con web browser

Buongiorno a tutti
in un applicativo ho una form, al cui interno c'è un oggetto ole webbrowser.
vengono eseguite delle azioni all'interno della pagina web, come ad esempio, la compilazione di caselle di testo o la scelta nelle caselle combinate.
ad esempio ho un pulsante che compila la test box, e un'altro che esegue il click sul tasto "avanti" della pagina web.
questo è il codice del Pulsante1:
WebBrowser8.Document.all.Item("f1:j_idt145").Value = Me.PIVA
WebBrowser8.Document.all.Item("f1:date").Value = Format(Me.DATA1, "dd/mm/yyyy")
WebBrowser8.Document.all.Item("f1:j_idt158").Value = "1"
WebBrowser8.Document.all.Item("f1:j_idt162").Value = Me.ndoc
WebBrowser8.Document.all.Item("f1:date1").Value = Format(Me.DATA1, "dd/mm/yyyy")
WebBrowser8.Document.all.Item("f1:idCfCittadino").Value = Me.codfisc
questo è il codice del pulsante2
WebBrowser8.Document.all.Item("f1:idSelectTipoDoc_editableInput").Click
il mio problema è che faccio eseguire tutto il codice dal "pulsante1", non esegue in realtà l'ultima istruzione, ovvero quella di "click", come se fosse necessario un refresh della pagina web o un timer di attesa tra le prime istruzioni e il "click".

Avete delle dritte che posso seguire ?
grazie in anticipo
buona giornata a tutti
Andrea

9 Risposte

  • Re: Form con web browser

    Ciao

    se il problema è l'attesa, potresti utilizzare La funzione API Sleep.
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
    La devi dichiarare all'inizio del modulo ... in questo caso è per sistemi a 64 bit, altrimenti devi togliere la parola "PtrSafe"

    e poi devi richiamarla prima del click, impostando il numero di millisecondi necessari (credo che 1000 in questo caso bastino)
  • Re: Form con web browser

    Grazie per la risposta ....
    ho provato ma non va! ....
    nella form ci sono 8 COMMANDBUTTON, ma è come se ognuno potesse fare una sola operazione/compilazione.....
    allego codice dei BUTTON

    b1
    WebBrowser8.Document.all.Item("f1:j_idt145").Value = Me.PIVA
    WebBrowser8.Document.all.Item("f1:date").Value = Format(Me.DATA1, "dd/mm/yyyy")
    WebBrowser8.Document.all.Item("f1:j_idt158").Value = "1"
    WebBrowser8.Document.all.Item("f1:j_idt162").Value = Me.ndoc
    WebBrowser8.Document.all.Item("f1:date1").Value = Format(Me.DATA1, "dd/mm/yyyy")
    WebBrowser8.Document.all.Item("f1:idCfCittadino").Value = Me.codfisc
    If Me.modalita_pagamento = "si" Then
    WebBrowser8.Document.all.Item("f1:j_idt177_editableInput").Click
    SendKeys ("S"), False
    SendKeys ("{ENTER}"), False
    Else
    WebBrowser8.Document.all.Item("f1:j_idt177_editableInput").Click
    SendKeys ("n"), False
    SendKeys ("{ENTER}"), False
    End If
    
    b2
    WebBrowser8.Document.all.Item("f1:idSelectTipoDoc_editableInput").Click
    SendKeys ("F"), False
    SendKeys ("{ENTER}"), False
    
    b3
    WebBrowser8.Document.all.Item("f1:avanti").Click
    
    b4
    WebBrowser8.Document.all.Item("input").Value = Me.SommaDitotale
    WebBrowser8.Document.all.Item("cmbNumbers_editableInput").Click
    SendKeys ("s"), False
    SendKeys ("{ENTER}"), False
    WebBrowser8.Document.all.Item("inputAliquotaIva").Value = "22,00"
    
    se provo ad concatenare il codice in un unico button, non funziona, o meglio da problemi sempre sull'istruzione sendkeys. anche se inserisco sleep come suggerito. se lo lascio così funziona perfettamente.
    grazie mille!!!
  • Re: Form con web browser

    Inoltre, come suggeritomi, includendo Sleep prima dell'evento click, sembra che "il timer" parta subito come prima riga di comando e non prima dell'evento click.

    grazie
    Andrea
  • Re: Form con web browser

    Il suggerimento di usare SLEEP è molto errato, non rende SINCRONA l'azione e non può a prescindere essere calibrato sul reale tempo di risposta... quindi da scartare.

    L'Oggetto in questione, mi pare esponga l'evento [DocumentComplete]... hai provato ad usarlo...?
    
        Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
            If (pDisp Is WebBrowser1.Application) Then
                If URL = "http://URLName.com/whatever.html" Then
                     'Do THis
                Else
                     'Do THis
                End If
            End If
        End Sub
  • Re: Form con web browser

    Alex grazie come sempre
    Mi puoi indicare della documentazione da studiare, non ho trovato nulla
    grazie
    Andrea
  • Re: Form con web browser

    Ma dove hai cercato...?
    https://docs.microsoft.com/en-us/office/vba/api/access.webbrowsercontrol
  • Re: Form con web browser

    @Alex ha scritto:


    Il suggerimento di usare SLEEP è molto errato, non rende SINCRONA l'azione e non può a prescindere essere calibrato sul reale tempo di risposta... quindi da scartare. Ciao Alex

    io solitamente uso Sleep perché i miei "programmi" interagiscono con Internet e l'url delle pagine web a volte non cambia (dipende dall'azione).

    Quindi, anche inserendo un controllo sull'url il problema non mi si risolve.

    Conosci qualche altro metodo?

    Preciso che io utilizzo la libreria di Selenium ed interagisco con Chrome.
  • Re: Form con web browser

    Marcdreamer ha scritto:


    Ciao Alex

    io solitamente uso Sleep perché i miei "programmi" interagiscono con Internet e l'url delle pagine web a volte non cambia (dipende dall'azione).
    Non comprendo questa affermazione... sleep non va bene, il Complete del caricamento dipende da molti fattori... di rete principalmente e lo Sleep non ne tiene conto.
    Supponi di mettere Sleep a 1000 ed avere un sito che oggi fatica a rispondere... impiega 2sec... ma di solito impiega 200ms...

    Marcdreamer ha scritto:


    Quindi, anche inserendo un controllo sull'url il problema non mi si risolve.

    Conosci qualche altro metodo?
    L'evento che ho suggerito non va bene...?
  • Re: Form con web browser

    Marcdreamer ha scritto:


    Preciso che io utilizzo la libreria di Selenium ed interagisco con Chrome.
    eh eh, raccontala tutta, allora.
    Siamo tutti in attesa del nuovo supermegafantastico controllo webbrowser che dia ad Edge orecchie in grado di sentire VBA. Arriva, arriva, dicono da Microsoft
    https://www.microsoft.com/en-gb/microsoft-365/roadmap?filters=&searchterms=65405
    (speriamo che ci senta un po' meglio di come IE capiva vba)
Devi accedere o registrarti per scrivere nel forum
9 risposte