Condividi:        

Salva "pagina web, completa"

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Salva "pagina web, completa"

Postdi il_Bandito » 18/01/17 14:41

Ciao a tutti,
seguo da tempo questo forum ed oggi è arrivato il momento di richiedere un aiuto.

Sono registrato ad un sito con recensioni di ristoranti. A volte cerco quelli in cui si mangia con una cifra fissa, altre volte vado per tematica (fusion, italiano, vegano, ecc.). Alla fine, quando trovo il ristorante che mi piace, salvo il link.

Ad oggi vorrei archiviare questi file, andando a salvare le pagine in modo che mi rimangano archiviate ma ho un problema.
Se vado all'indirizzo della pagina che mi interessa, faccio:
File => Salva pagina con nome=> Pagina web, completa

Così facendo ho la mia pagina .html (compresa di tutti i testi) ed una cartella con tutti i contributi. Ho provato a velocizzare il tutto (avendo 130 link per tipologia di ristorante) ma mi viene salvata ogni pagina in .html (ma senza tutti i testi interni).

Vi riporto la macro:
Codice: Seleziona tutto
Option Base 0

Sub Test11()
   
    Dim rCell As Range, myRan As Range
   
    Dim iFile As Integer
   
    '
    If IE Is Nothing Then Set IE = CreateObject("InternetExplorer.APPLICATION")
    Set myRan = ThisWorkbook.Sheets("Foglio1").Range("A1:A78") '<<< Il foglio nel file che contiene le macro con l' elenco url
    '
    iFile = 0
    For Each rCell In myRan
      iFile = iFile + 1
       If Not Fetch(rCell.Value, "C:\Users\mia_directory\Desktop\Schede libri\Elenco" & iFile & _
       Format(Now, "yymmdd_hhmmss_") & rCell.Row & ".mht") Then
           MsgBox "error getting page @ " & rCell.Address
       End If
    Next
End Sub


Function Fetch(URL, dest) As Boolean
    On Error Resume Next
    Dim b
    With CreateObject("Microsoft.XMLHTTP")
        .Open "GET", URL, False
        .send
        b = .responseBody
        If Err.Number <> 0 Or .Status <> 200 Then Exit Function
    End With
    With CreateObject("ADODB.Stream")
        .Type = 1
        .Open
        .Write b
        .SaveToFile dest, 2
    End With
    Fetch = Err.Number = 0
End Function


Così facendo mi compare un file .mht
Ho provato tutte le estensioni, ovvero anche .txt ma il risultato è nettamente differente rispetto al salvataggio da browser...dove sbaglio?

Uso Excel 2010 e come browser Mozilla.

Vi ringrazio anticipatamente.
il_Bandito
Newbie
 
Post: 4
Iscritto il: 18/01/17 14:27

Sponsor
 

Re: Salva "pagina web, completa"

Postdi Anthony47 » 18/01/17 23:27

Ciao Bandito, benvenuto nel forum.
Un commento gratuito: in una situazione dove siamo connessi h24 che senso ha mantenere in locale il contenuto di un sito, che tra l'altro e' dinamico e quindi cambia in continuazione?
Comunque...
Ho provato tutte le estensioni, ovvero anche .txt ma il risultato è nettamente differente rispetto al salvataggio da browser...dove sbaglio?
Sbagli ad aspettarti che le due operazioni portino allo stesso risultato.
La XMLHTTP.Open "GET" ti restituisce il "documento htm" corrispondente all'url; ma il linguaggio html presuppone la navigazione verso altri indirizzi contenuti nei link del documento che quindi saranno accessibili aprendo il documento con un browser su pc collegato a internet. Ancora peggio e' la situazione se si salva il file come "mht" (come fa la tua macro), visto che la struttura non e' mht.
I comandi "Salva come pagina web completa" oppure "Salva come archivio web, file unico" salvano il contenuto visualizzato, quindi compreso i media (ma non tutti i tipi).

Insomma secondo me ti bastano i link, oppure salvi il documento htm (in formato htm e non mht) e lo consulti avendo attiva una connessione internet.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19183
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Salva "pagina web, completa"

Postdi il_Bandito » 19/01/17 11:42

Ciao Anthony47,
ti ringrazio per la risposta.

Io salvo i file in html perchè quando ne ho un po' li stampo almeno mi rimane l'archivio a colori. Tendenzialmente sono recensioni che non vengono modificate.
Es.

www.pippo.it/ristoranti/lombardia/milan ... -la_bufala

Se ne possono aggiungere, certo, ma ad un dato indirizzo corrisponde un ristorante specifico. Quindi volevo trovare una soluzione per avere impaginati: recensione, logo locale, indirizzi e contatti e recensioni dei clienti.
il_Bandito
Newbie
 
Post: 4
Iscritto il: 18/01/17 14:27

Re: Salva "pagina web, completa"

Postdi poldo98 » 19/01/17 22:19

Da tempo io archivio pagine web (per il mio hobby) semplicemente trasformandole in file pdf.
Puoi utilizzare qualsiasi Browser (Google, Firefox, Microsoft Edge, Explorer11) i risultati sono un po diversi a seconda del browser ma è una questione di preferenze.
La procedura è questa:
Prima installa una stampante virtuale, Io uso PDF24 ma va bene anche Foxit Reader
Quando visiterai una pagina web che vorrai salvare, utilizza l'opzione "stampa" e si aprirà una finestra dove indicherai che vuoi salvare la pagina o le pagine come file pdf. Click. Finito
Potrai poi stampare veramente, unire, dividere, cancellare parzialmente i singoli file. Insomma si può fare tutto. (Io uso sempre PDF24)
L'unica notazione importante è che soltanto Google stampa (cioè trasforma in pdf) mantenendo tutti gli hyperlink presenti
nella pagina che vuoi conservare.
Ciao
poldo98
Utente Junior
 
Post: 73
Iscritto il: 26/03/07 15:12

Re: Salva "pagina web, completa"

Postdi il_Bandito » 20/01/17 11:31

Grazie poldo98,
mi hai dato un'idea: modifico la macro affinché, al posto di salvare le pagine in un determinato formato, mi stampi sulla stampante virtuale.
il_Bandito
Newbie
 
Post: 4
Iscritto il: 18/01/17 14:27

Re: Salva "pagina web, completa"

Postdi Anthony47 » 21/01/17 00:32

Vedi se risolvi con quanto suggerito da poldo.

In alternativa io prenderei lo spunto da quanto fatto con l'utente rosy2 in questa discussione:
viewtopic.php?p=605857#p605941

In particolare: l'uso di una stampante virtuale per creare file pdf, l'impostazione "Stampa automaticamente", l'uso di una macro per scorrere gli url desiderati da stampare.
La stampante virtuale che io uso e' PDFCreator, scaricabile qui: http://www.pdfforge.org/pdfcreator/download

Per l'impostazione "Stampa automaticamente" riporto qui le istruzioni gia' presenti nella discussione appena linkata.
2.Personalizza PDFCreator in modo che stampi automaticamente:
-avvia PDFCreator
-Menu /Stampante /Opzioni; fai click su SalvataggioAutomatico
-spunta Utilizza salvataggio automatico
-spunta Utilizza questa cartella per il salvataggio automatico
-come cartella io ho usato D:\PIPPO\prova\
Puoi usare la cartella che vuoi; la cartella deve gia' esistere e non deve contenere file con nome del tipo 2017*.pdf; lo stesso nome cartella va inserito in una riga del codice macro (vedi avanti)
-conferma con Salva e puoi chiudere la finestra PDFCreator

Aggiungo: prima di chiudere la finestra PDFCreator imposta "Nome del file" come "<DateTime>" (dovrebbe essere la modalita' di default, ma meglio controllare).

Finita questa fase, prepara su foglio Excel una tabella con in colonna B l'url da aprire e in colonna A il nome file che vuoi utilizzare per salvare il file pdf. Usa la riga 1 per le intestazioni e comincia l'elenco da riga 2.

A questo punto, va inserito il codice che dovrebbe produrre tutte le stampe.
Per questo, partendo dal file Excel:
-premi Alt-F11 per aprire l'editor delle macro
-Menu /Inserisci /Modulo
-Copia il codice seguente e incollalo nel frame dx del modulo appena creato
-Personalizza la riga marcata <<< per indicare in quale directory directory verra' effettuato il salvataggio automatico dei file pdf che saranno generati.
La directory deve gia' esistere e non deve contenere file pdf il cui nome cominci con "AnnoCorrente" (quindi con 2017).

Il codice:
Codice: Seleziona tutto
Dim IE As Object, objPDFCreator As Object
Public Declare Sub Sleep Lib "kernel32" _
    (ByVal dwMilliseconds As Long)

Sub StampaPagine()
Dim I As Long, myF As String, myTim As Single, mYear As Long
'
'Imposta stampante di default:
Call Shell("rundll32 printui.dll,PrintUIEntry /y /n ""PDFCreator""")
Sleep (5000)
'
Set IE = CreateObject("InternetExplorer.Application")
mYear = Year(Now)
IE.Visible = True
Perc = "D:\PIPPO\prova\"                        '<<<< La directory di salvataggio automatico
For I = 2 To Cells(Rows.Count, 2).End(xlUp).Row
    If Dir(Perc & mYear & "*.pdf") <> "" Then
        MsgBox ("Esistono gia' file " & mYear & "*.pdf" & vbCrLf & _
           "Le stampe non possono procedere")   '**** Vedi Testo
        GoTo exitA
    End If
    Cells(I, 2).Select
    If Selection.Value <> "" Then
        'Carica la pagina:
        GetTabs (Cells(I, 2))
        myWait (1.5)
        'Stampala:
        Application.SendKeys "%f", True
        myWait (2)
        Application.SendKeys "s", True
        myWait (3)
        Application.SendKeys "^{ENTER}", True
        myWait (0.1)
        myTim = Timer
remyF:
        DoEvents:
        myWait (2.5)
        myF = Dir(Perc & mYear & "*.pdf")
        'attesa file salvato, timeout 15sec:
        If myF = "" And Timer < (myTim + 15) Then GoTo remyF
        'Attesa completamento stampa, timeout 40 sec
        If FileStatus(Perc & myF) <> 0 And Timer < (myTim + 40) Then GoTo remyF
        myWait (1)
        If myF <> "" Then Name (Perc & myF) As (Perc & Cells(I, 1).Value & ".pdf")
remyN:
        DoEvents
        If FileStatus(Perc & Cells(I, 1).Value & ".pdf") <> 0 And Timer < (myTim + 15) Then GoTo remyN
    End If
Next I
MsgBox ("Completato...")
exitA:              'Uscita da IE
IE.Quit
Set IE = Nothing
End Sub

Sub GetTabs(ByVal MyUrl As String)
'Time out su 15 sec
If IE Is Nothing Then Set IE = CreateObject("InternetExplorer.Application")
With IE
'    Application.SendKeys "{ESC}"
    .navigate MyUrl
    .Visible = True
    myTim = Timer
    Do While .Busy
        DoEvents
        If Timer > (myTim + 5) Then Exit Do
        Loop 'Attesa not busy
    Do While .readyState <> 4
        DoEvents
        If Timer > (myTim + 15) Then Exit Do
        Loop 'Attesa documento
End With
'
myWait (1)
End Sub


Sub myWait(myStab As Single)
Dim myStTiM As Single
'
    myStTiM = Timer
    Do          'wait myStab
        DoEvents
        Sleep (100)
        If Timer > myStTiM + myStab Or Timer < myStTiM Then Exit Do
    Loop
End Sub


Function FileStatus(filename As String) As Variant
'Check file status; codice di ritorno:
'0=file libero, 70=file occupato, 53=file non esiste
'76=path non esiste
'altri errori: da indagare
'
    Dim filenum As Integer, errnum As Integer
'
    On Error Resume Next   ' Turn error checking off.
    filenum = FreeFile()   ' Get a free file number.
    ' Attempt to open the file and lock it.
    Open filename For Input Lock Read As #filenum
    Close filenum          ' Close the file.
    errnum = Err           ' Save the error number that occurred.
    On Error GoTo 0        ' Turn error checking back on.
FileStatus = errnum
End Function

Molte cose sono derivate dalla discussione linkata, anche se il codice e' ora piu' articolato.

Quando sei pronto, attiva il foglio con l'elenco degli Url e avvia la Sub StampaPagine; la modalita' di lancio:
-premi Alt-F8
-seleziona StampaPagine dall'elenco di macro disponibili
-premi Esegui

La macro aprira' una sessione di InternetExplorer e aprira' una dopo l'altra le pagine indicate sul foglio Excel, impostera' PDFCreator come stampante di default, avviera' la stampa, rinominera' i file con il nome indicato accanto all'url.
Questa fase e' fatta "al buio"; e' quindi importante che il pc non esegua altro durante l'esecuzione della macro. Si raccomanda quindi di cominciare con un piccolo elenco di Url per testare il funzionamento di tutto. E' possibile che qualche pagina impieghi effettivamente tanto tempo a essere stampata, quindi organizzati col caffe'.

Il risultato sara' un elenco di file "pdf" contenenti la stampa degli Url elencati.

Se pensi di usare la stampante virtuale PDFCreator per altri scopi allora e' opportuno togliere, in PDFCreator /Opzioni, l' impostazione "Utilizza salvataggio automatico"

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19183
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Salva "pagina web, completa"":


Chi c’è in linea

Visitano il forum: Nessuno e 60 ospiti