[Risolto] Ottenere link dentro pagina web tramite macro

Creare una macro - Scrivere uno script - Usare le API
Rispondi
geovign
Messaggi: 217
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

[Risolto] Ottenere link dentro pagina web tramite macro

Messaggio da geovign »

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
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
LibO 7 su LinuxMint 21
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Ottenere link dentro pagina web tramite macro

Messaggio da unlucky83 »

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
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
geovign
Messaggi: 217
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: Ottenere link dentro pagina web tramite macro

Messaggio da geovign »

Ciao @unlucky83
unlucky83 ha scritto: ... Con una macro apro il file html in lettura ...
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.
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
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Ottenere link dentro pagina web tramite macro

Messaggio da unlucky83 »

Se qui metti direttamente il link http dovrebbe bastare

Codice: Seleziona tutto

Filename = "http://www.fitosanitari.salute.gov.it/fitosanitariwsWeb_new/FitosanitariServlet?ACTION=cercaProdotti&FROM=0&TO=49&PROVENIENZA=RICERCA&NUMERO_REGISTRAZIONE=015059"
La pagina non va necessariamente scaricata, ma va letta da macro.
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
geovign
Messaggi: 217
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: Ottenere link dentro pagina web tramite macro

Messaggio da geovign »

Ho fatto quanto suggerito ma legge una pagina sbagliata
Istantanea.jpg
e non quella corretta
Istantanea2.jpg
è 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
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: [Risolto] Ottenere link dentro pagina web tramite macro

Messaggio da unlucky83 »

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
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: [Risolto] Ottenere link dentro pagina web tramite macro

Messaggio da unlucky83 »

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
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
geovign
Messaggi: 217
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: [Risolto] Ottenere link dentro pagina web tramite macro

Messaggio da geovign »

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
LibO 7 su LinuxMint 21
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: [Risolto] Ottenere link dentro pagina web tramite macro

Messaggio da unlucky83 »

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”
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
geovign
Messaggi: 217
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: [Risolto] Ottenere link dentro pagina web tramite macro

Messaggio da geovign »

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.

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
Grazie di tutto.
Geo
LibO 7 su LinuxMint 21
Rispondi