[Risolto] Ottenere link dentro pagina web tramite macro
[Risolto] Ottenere link dentro pagina web tramite macro
Un saluto al forum.
Tramite macro, mi piacerebbe visualizzare le etichette di prodotti fitosanitari dal sito del Ministero della salute.
Nel file allegato è presente una prima macro che mi indirizza alla pagina di un prodotto a caso (tramite il numero di registrazione); la macro sfrutta l'interfaccia "SystemShellExecute" per aprire le pagine web con il browser predefinito. Il codice apre un primo link alla pagina di ricerca e successivamente, con un secondo link, accedo alla pagina dedicata al prodotto ricercato (se prima non accedo alla pagina di ricerca, il secondo link non funziona correttamente).
Il collegamento al file pdf dell'etichetta si trova nella ultima colonna a destra.
Non esiste, o meglio non sono riuscito a trovare, un "collegamento" diretto tra la etichetta ed il prodotto (nome o numero di registrazione) quindi per ora devo ovviare nel modo descritto.
E' possibile ottenere il link all'etichetta tramite macro, per poi aprirlo con il lettore pdf predefinito utilizzando sempre l'interfaccia "SystemShellExecute" ?
Ovviamente il secondo link presente nella mia macro riguarda un prodotto "tipo".
Spero di essere stato abbastanza chiaro.
Grazie
Saluti
Geo
Tramite macro, mi piacerebbe visualizzare le etichette di prodotti fitosanitari dal sito del Ministero della salute.
Nel file allegato è presente una prima macro che mi indirizza alla pagina di un prodotto a caso (tramite il numero di registrazione); la macro sfrutta l'interfaccia "SystemShellExecute" per aprire le pagine web con il browser predefinito. Il codice apre un primo link alla pagina di ricerca e successivamente, con un secondo link, accedo alla pagina dedicata al prodotto ricercato (se prima non accedo alla pagina di ricerca, il secondo link non funziona correttamente).
Il collegamento al file pdf dell'etichetta si trova nella ultima colonna a destra.
Non esiste, o meglio non sono riuscito a trovare, un "collegamento" diretto tra la etichetta ed il prodotto (nome o numero di registrazione) quindi per ora devo ovviare nel modo descritto.
E' possibile ottenere il link all'etichetta tramite macro, per poi aprirlo con il lettore pdf predefinito utilizzando sempre l'interfaccia "SystemShellExecute" ?
Ovviamente il secondo link presente nella mia macro riguarda un prodotto "tipo".
Spero di essere stato abbastanza chiaro.
Grazie
Saluti
Geo
- Allegati
-
- Apertura file etichette.ods
- (10.23 KiB) Scaricato 114 volte
Ultima modifica di charlie il sabato 22 febbraio 2020, 14:46, modificato 2 volte in totale.
Motivazione: Aggiunta spunta verde
Motivazione: Aggiunta spunta verde
LibO 7 su LinuxMint 21
Re: Ottenere link dentro pagina web tramite macro
Ciao
TI dico come farei io (e come facevo + di qualche anno fa). Con una macro apro il file html in lettura. Cercherei tra il codice la stringa EtichettaServlet e mi prenderei i caratteri successivi così ottengo l'ID dell'etichetta. Poi costruirei il link "www.fitosanitari.salute.gov.it/fitosani ... ervlet?id=" & NUMERO e farei aprire la pagina che si aprirebbe bianca con la finestra che chiede se scaricare o visualizzare il file.
Negli anni avevo provato qualche variante forse più efficace, ma adesso non mi viene in mente
TI dico come farei io (e come facevo + di qualche anno fa). Con una macro apro il file html in lettura. Cercherei tra il codice la stringa EtichettaServlet e mi prenderei i caratteri successivi così ottengo l'ID dell'etichetta. Poi costruirei il link "www.fitosanitari.salute.gov.it/fitosani ... ervlet?id=" & NUMERO e farei aprire la pagina che si aprirebbe bianca con la finestra che chiede se scaricare o visualizzare il file.
Negli anni avevo provato qualche variante forse più efficace, ma adesso non mi viene in mente
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: Ottenere link dentro pagina web tramite macro
Ciao @unlucky83
Comunque, ho provato a salvare (direttamente dal mio browser) la pagina in formato html. Ho usato il seguente codice per scaricare il pdf
e funziona. Ma mi manca il pezzo di mezzo che non so come affrontarlo.
Geo
Quindi devo salvare una copia della pagina web? Se si, Come? Non conosco il browser utilizzato da altri utilizzatori del programma per aprire la pagina web quindi non posso passare eventuali parametri.unlucky83 ha scritto: ... Con una macro apro il file html in lettura ...
Comunque, ho provato a salvare (direttamente dal mio browser) la pagina in formato html. Ho usato il seguente codice per scaricare il pdf
Codice: Seleziona tutto
Sub Main1
dim Filename as string
dim FileNo As Integer
dim CurrentLine As String
dim File As String
dim Stringa as String
dim NumEtichetta as string
Filename = "/home/antonio/Desktop/Banca dati dei prodotti fitosanitari.html" 'posizione del file salvato
FileNo = Freefile
Open Filename For Input As FileNo
Do While not eof(FileNo)
Line Input #FileNo, CurrentLine
if InStr(CurrentLine,"EtichettaServlet?id=") <> 0 then
Stringa = Mid(CurrentLine,InStr(CurrentLine,"?")+4) '? è presente una sola volta
NumEtichetta = Left(Stringa,InStr(Stringa,"""")-1)
end if
Loop
Close #FileNo
Msgbox NumEtichetta
dim Indirizzo as string
dim oSvc as object
Indirizzo = "http://www.fitosanitari.salute.gov.it/fitosanitariwsWeb_new/EtichettaServlet?id=" & NumEtichetta
oSvc = createUnoService("com.sun.star.system.SystemShellExecute")
oSvc.execute(Indirizzo, "", 0)
End sub
e funziona. Ma mi manca il pezzo di mezzo che non so come affrontarlo.
Geo
LibO 7 su LinuxMint 21
Re: Ottenere link dentro pagina web tramite macro
Se qui metti direttamente il link http dovrebbe bastare
La pagina non va necessariamente scaricata, ma va letta da macro.
Codice: Seleziona tutto
Filename = "http://www.fitosanitari.salute.gov.it/fitosanitariwsWeb_new/FitosanitariServlet?ACTION=cercaProdotti&FROM=0&TO=49&PROVENIENZA=RICERCA&NUMERO_REGISTRAZIONE=015059"
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: Ottenere link dentro pagina web tramite macro
Ho fatto quanto suggerito ma legge una pagina sbagliata
Non è un problema del codice che funziona correttamente, se ad esempio utilizzo il link della pagina di ricerca la legge bene, ma probabilmente del sito.
Penso che l'unica soluzione sia quella di salvare la pagina e poi leggerla, procedura che a questo punto scarto.
Anche se non ho raggiunto a pieno lo scopo prefissatomi con questa discussione, metto comunque risolto in quanto le indicazioni/suggerimenti avuti da @unlucky83 sono stati tutti nella giusta direzione.
Grazie
Saluti
Geo
e non quella corretta è lo stesso errore che mi capita se non passo dalla pagina di ricerca (vedi primo post).Non è un problema del codice che funziona correttamente, se ad esempio utilizzo il link della pagina di ricerca la legge bene, ma probabilmente del sito.
Penso che l'unica soluzione sia quella di salvare la pagina e poi leggerla, procedura che a questo punto scarto.
Anche se non ho raggiunto a pieno lo scopo prefissatomi con questa discussione, metto comunque risolto in quanto le indicazioni/suggerimenti avuti da @unlucky83 sono stati tutti nella giusta direzione.
Grazie
Saluti
Geo
LibO 7 su LinuxMint 21
Re: [Risolto] Ottenere link dentro pagina web tramite macro
Guarda, è strano perché avevo provato un codice simile e mi funzionava, a parte il fatto che quella sera erano state rimosse tutte le etichette dal sito. Stasera ti mando il mio codice
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: [Risolto] Ottenere link dentro pagina web tramite macro
E' un problema di cookie. Il basic di openoffice ha delle librerie per i cookies, ma in rete non ho mai trovato una guida o una macro che le impiega, quindi non sò risolvere il problema usando solo calc.
Di solito aggiro il problema con wget, programma preistallato in ubuntu, ma comunque pluripiattaforma. Con wget riesco a scaricare (alcune volte) anche pagine che si visualizzano solo dopo aver fatto login e password.
Avevo aperto una discussione qualche anno fa
viewtopic.php?f=6&t=6147&hilit=wget
Di solito aggiro il problema con wget, programma preistallato in ubuntu, ma comunque pluripiattaforma. Con wget riesco a scaricare (alcune volte) anche pagine che si visualizzano solo dopo aver fatto login e password.
Avevo aperto una discussione qualche anno fa
viewtopic.php?f=6&t=6147&hilit=wget
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: [Risolto] Ottenere link dentro pagina web tramite macro
Ciao @unlucky83,
visto che riesco a visualizzare la pagina del prodotto dal sito del Ministero, l'etichetta verrà scaricata da lì.
Per quanto riguarda wget, lo conosco e l'ho anche utilizzato all'interno di macro seguendo tue istruzioni in una qualche discussione all'interno del forum oltre a quella da te indicata.
Ne approfitto per chiederti un'altra cosa:
Nel codice ho impostato un tempo di attesa di 5 secondi tra le istruzioni che mi aprono le due pagine, però qualche volta mi capita che il primo link (pagina di ricerca) per caricarsi ci impieghi più di 5 secondi e quindi il secondo link mi va in errore (mostra il messaggio di errore del mio post precedente). Mi chiedevo, è possibile condizionare l'esecuzione della seconda istruzione (apertura del secondo link) al completo caricamento della prima pagina? (per avviare il browser predefinito uso l'interfaccia "SystemShellExecute")
Saluti
Geo
visto che riesco a visualizzare la pagina del prodotto dal sito del Ministero, l'etichetta verrà scaricata da lì.
Per quanto riguarda wget, lo conosco e l'ho anche utilizzato all'interno di macro seguendo tue istruzioni in una qualche discussione all'interno del forum oltre a quella da te indicata.
Ne approfitto per chiederti un'altra cosa:
Nel codice ho impostato un tempo di attesa di 5 secondi tra le istruzioni che mi aprono le due pagine, però qualche volta mi capita che il primo link (pagina di ricerca) per caricarsi ci impieghi più di 5 secondi e quindi il secondo link mi va in errore (mostra il messaggio di errore del mio post precedente). Mi chiedevo, è possibile condizionare l'esecuzione della seconda istruzione (apertura del secondo link) al completo caricamento della prima pagina? (per avviare il browser predefinito uso l'interfaccia "SystemShellExecute")
Saluti
Geo
LibO 7 su LinuxMint 21
Re: [Risolto] Ottenere link dentro pagina web tramite macro
Non conosco un modo per controllare il caricamento della seconda pagina. Potrebbe esserci un parametro da aggiungere, ma che si diversifica in base al browser impostato come default. In tal caso dovresti fare delle ricerche per ciascun browser, scoprire il comando da terminale che corrisponde al controllo del caricamento, aggiungere macro per il riconoscimento del browser predefinito è un select case per mettere il parametro giusto.
Io penso che la cosa migliore sia rendere un ciclo di l’apertura della prima pagina, un msgbox che compare ogni 5 secondi in cui chiedere se la pagina è caricata e uscire dal ciclo quando si preme “si”
Io penso che la cosa migliore sia rendere un ciclo di l’apertura della prima pagina, un msgbox che compare ogni 5 secondi in cui chiedere se la pagina è caricata e uscire dal ciclo quando si preme “si”
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: [Risolto] Ottenere link dentro pagina web tramite macro
Ho seguito in parte il tuo suggerimento: durante l'apertura della prima pagina appare un messaggio che invita a cliccare sul tasto OK al termine del caricamento.
A conclusione della discussione, riporto il codice utilizzato.
Grazie di tutto.
Geo
A conclusione della discussione, riporto il codice utilizzato.
Codice: Seleziona tutto
Sub EntraSitoMinistero
dim Prodotto as string
Prodotto = ComboBoxRegFS.text
if Prodotto = "" then
msgbox ("Non è stato indicato alcun prodotto firosanitario." & CHR$(10) &_
"Scegliere prima un prodotto nell'apposito campo.",0+48, "Registra prodotto fitosanitario - Errore")
ComboBoxRegFS.setFocus
exit sub
end if
rem cerco all'interno della banca dati il prodotto selezionato
dim LastRow1 as long
dim InRange as object
dim oDescriptor as object
dim oFound as object
dim MyCounter as integer
LastRow1 = LastRowInColonna(FgBancaDatiFS,1)
InRange= FgBancaDatiFS.getCellRangeByName("B5:B" & LastRow1 +1)
oDescriptor = InRange.createSearchDescriptor()
With oDescriptor
.SearchString = Prodotto
.SearchWords = True
.SearchType = 1
.SearchCaseSensitive = False
End With
oFound = InRange.findFirst(oDescriptor)
if IsNull(oFound) then
MsgBox ("Il prodotto selezionato non è presente nella banca dati")
exit sub
end if
MyCounter = oFound.getCellAddress.Row +1
NumRegistrazione = FgBancaDatiFS.getCellRangeByName("E" & MyCounter).string
rem apro pagine web del Ministero
dim NumeroDiZero as integer
dim AggiungiZero as string
if Len(NumRegistrazione) < 3 then 'se numero caratteri è minore di tre
NumeroDiZero = 3 - Len(NumRegistrazione)
AggiungiZero = String(NumeroDiZeri,"0") 'stringa costituita di n "0"
NumRegistrazione = AggiungiZero & FgBancaDatiFS.getCellRangeByName("E" & MyCounter).string
end if
rem apro pagine web del Ministero
dim Indirizzo1 as string
dim Indirizzo2 as string
Dim oSvc as object
Indirizzo1 = "http://www.fitosanitari.salute.gov.it/fitosanitariwsWeb_new/FitosanitariServlet"
Indirizzo2 = "http://www.fitosanitari.salute.gov.it/fitosanitariwsWeb_new/FitosanitariServlet?ACTION=" &_
"cercaProdotti&FROM=0&TO=49&PROVENIENZA=RICERCA&NUMERO_REGISTRAZIONE=" & NumRegistrazione
oSvc = createUnoService("com.sun.star.system.SystemShellExecute")
oSvc.execute(Indirizzo1, "", 0) 'apro pagina ricerca del ministero
wait 3000 'attendo tre secondi per avvio browser
MsgBox ("Al termine del carimento della pagina Web premere il tasto OK.", _
0+48, "Registra prodotto fitosanitario - Entra nel sito del Ministero")
oSvc.execute(Indirizzo2, "", 0) 'apro pagina del prodotto ricercato
End Sub
Geo
LibO 7 su LinuxMint 21