[PYTHON] So konvertieren Sie Webseiten mit VBA (Excel) (Selenium Basic) in PDF, PNG, JPG

So konvertieren Sie Webseiten mit VBA (Excel) in PDF, PNG, JPG

-Überblick- Ich habe es gemacht, weil ich es oft im Geschäft benutzt habe.

Selen ist ein Tool, das Browseroperationen einfach automatisiert. Ich höre oft, wie man Selenium mit Python oder JavaScript verwendet, aber tatsächlich kann es mit Visual Basic ausgeführt werden.

Insbesondere in Japan denke ich, dass viele Unternehmen stark von Excel abhängig sind. Daher scheint die Verwendung von Excel als grafische Benutzeroberfläche keinen psychologischen Widerstand zu haben. (Ich glaube ich habe viel zu sagen ...)

-Verfahren-

  1. Laden Sie Selenium Basic von [Selenium Release] herunter (https://github.com/florentbr/SeleniumBasic/releases/tag/v2.0.9.0).
  2. Installieren Sie die obige Datei.
  3. Laden Sie den Treiber für den gewünschten Browser herunter. (Dieses Mal werde ich Chrome verwenden) Chrome Driver
  4. Aktualisieren Sie chromedriver.exe in C: \ Users \ [Benutzername] \ AppData \ Local \ Selenium Basic mit chromedriver.exe, das in 3 heruntergeladen wurde. (Überschreiben Sie einfach die Datei)
  5. Schreiben Sie vba

-Einzelheiten- 1.2. URL etc. kann sich ändern. Bitte überprüfen Sie jeden einzelnen. Sie können es standardmäßig installieren. 3. Auch hier kann sich die URL ändern. Bitte überprüfen Sie jeden einzelnen. Laden Sie für Chrome dieselbe Version von Chrome herunter, die Sie verwenden. 4. Einfach ersetzen. 5.

Wenn Sie auf 4 gehen, wird die Selenium-Typbibliothek in der Excel-Entwicklungsumgebung unter Extras-> Referenzeinstellungen angezeigt. Überprüfen Sie sie daher. Wenn Sie dies nicht tun, können Sie Selen nicht verwenden. Überprüfen Sie auch die Referenzeinstellungen wie Microsoft Scripting Runtime.

Unten ist ein Beispiel. bis ~ (Zielverzeichnis speichern, Dateiname speichern, Webseiten-URL, Blattzeilennummer (zur Bestätigung oder zum Schreiben des Speicherverzeichnisses), Blatt zum Verwalten, ob gespeichert oder nicht)

Für PDF

Option Explicit

Sub toPDF(ByVal directory, ByVal filename, ByVal url, ByVal i, ByVal sheetn As String)
  On Error GoTo myerror:
    Dim sheet1 As Worksheet
    Set sheet1 = Sheets(sheetn)
    Dim sPath As String, WSH As Variant
    Set WSH = CreateObject("WScript.Shell")
    sPath = WSH.SpecialFolders("Desktop") & "\"
    If (directory = "") Then directory = sPath
    If (Right(directory, 1) <> "\") Then directory = directory & "\"
    If (filename = "") Then filename = Format(Now(), "yyyy-mm-dd-hh-mm-ss")
    Dim savepath As String
    savepath = directory & filename & ".pdf"
    Dim driver As New Selenium.ChromeDriver
    driver.SetPreference "download.default_directory", directory
    driver.SetPreference "download.directory_upgrade", True
    driver.SetPreference "download.prompt_for_download", False
    driver.SetPreference "safebrowsing.enabled", True
    driver.SetPreference "plugins.plugins_disabled", Array("Chrome PDF Viewer")
    driver.AddArgument "headless"
    driver.AddArgument "disable-gpu"
    driver.AddArgument "hide-scrollbars"
    Dim w As Long
    Dim h As Long

    driver.Start
    driver.Get url

    w = driver.ExecuteScript("return document.body.scrollWidth")
    h = driver.ExecuteScript("return document.body.scrollHeight")
    
    Dim pdf As Object
    
    driver.Window.SetSize w, h
    
    Set pdf = CreateObject("Selenium.PdfFile")
    pdf.SetPageSize 210, 297, "mm"
    pdf.AddImage driver.TakeScreenshot, True
    pdf.SaveAs savepath
    sheet1.Cells(i, 5).Value = 1
    sheet1.Cells(i, 6).Value = savepath
    driver.Quit
    Exit Sub
myerror:
    MsgBox "no"
    sheet1.Cells(i, 5).Value = 0
End Sub
Sub dopdf()
  Dim sPath As String, WSH As Variant
    Set WSH = CreateObject("WScript.Shell")
    sPath = WSH.SpecialFolders("Desktop") & "\"
    Dim directory As String
    Dim filename As String
    directory = sPath
    If (Right(Len(directory), 1) <> "\") Then directory = directory & "\"
    
  Dim sheet1 As String
  Dim i As Long
  
  sheet1 = "Für pdf"
  
  Dim sheetn As Worksheet
  Set sheetn = Sheets(sheet1)
  Dim r As Long
  r = sheetn.Cells(Rows.Count, 4).End(xlUp).Row
  For i = 2 To r
    If (sheetn.Cells(i, 4).Value = "") Then
      GoTo a1:
    End If
    filename = sheetn.Cells(i, 3).Text
    If (filename = "") Then filename = Format(Now(), "yyyy-mm-dd-hh-mm-ss")
    Dim result
    result = Dir(sheetn.Cells(i, 2).Text, vbDirectory)
    If (directory <> "" Or result <> True) Then sPath = sheetn.Cells(i, 2).Text
    Call toPDF(sPath, filename, sheetn.Cells(i, 4).Text, i, sheet1)
a1:
  Next i
End Sub

Für JPG

Option Explicit

Sub toJPG(ByVal directory, ByVal filename, ByVal url, ByVal i, ByVal sheetn As String)
  On Error GoTo myerror:
    Dim sheet1 As Worksheet
    Set sheet1 = Sheets(sheetn)
    Dim sPath As String, WSH As Variant
    Set WSH = CreateObject("WScript.Shell")
    sPath = WSH.SpecialFolders("Desktop") & "\"
    If (directory = "") Then directory = sPath
    If (Right(directory, 1) <> "\") Then directory = directory & "\"
    If (filename = "") Then filename = Format(Now(), "yyyy-mm-dd-hh-mm-ss")
    Dim savepath As String
    savepath = directory & filename & ".jpg "
    Dim driver As New Selenium.ChromeDriver
    driver.SetPreference "download.default_directory", directory
    driver.SetPreference "download.directory_upgrade", True
    driver.SetPreference "download.prompt_for_download", False
    driver.SetPreference "safebrowsing.enabled", True
    driver.SetPreference "plugins.plugins_disabled", Array("Chrome PDF Viewer")
    driver.AddArgument "headless"
    driver.AddArgument "disable-gpu"
    driver.AddArgument "hide-scrollbars"
    Dim w As Long
    Dim h As Long
    
    driver.Start
    driver.Get url
    driver.FindElementByClass("tab02").Click
    driver.ExecuteScript ("this.document.getElementById('tab01').setAttribute('class','tabContent01');")
    driver.ExecuteScript ("this.document.getElementById('tab03').setAttribute('class','tabContent03');")
    w = driver.ExecuteScript("return document.body.scrollWidth")
    h = driver.ExecuteScript("return document.body.scrollHeight")
    driver.Window.SetSize w, h
    driver.TakeScreenshot.SaveAs savepath
    sheet1.Cells(i, 5).Value = 1
    sheet1.Cells(i, 6).Value = savepath
    driver.Quit
    Exit Sub
myerror:
    
    sheet1.Cells(i, 5).Value = 0
End Sub
Sub dojpg()
  Dim sPath As String, WSH As Variant
    Set WSH = CreateObject("WScript.Shell")
    sPath = WSH.SpecialFolders("Desktop") & "\"
    Dim directory As String
    Dim filename As String
    directory = sPath
    If (Right(Len(directory), 1) <> "\") Then directory = directory & "\"
    
  Dim sheet1 As String
  Dim i As Long
  
  sheet1 = "Für jpg"
  
  Dim sheetn As Worksheet
  Set sheetn = Sheets(sheet1)
  Dim r As Long
  r = sheetn.Cells(Rows.Count, 4).End(xlUp).Row
  For i = 2 To r
    If (sheetn.Cells(i, 4).Value = "") Then
      GoTo a1:
    End If
    filename = sheetn.Cells(i, 3).Text
    If (filename = "") Then filename = Format(Now(), "yyyy-mm-dd-hh-mm-ss")
    Dim result
    result = Dir(sheetn.Cells(i, 2).Text, vbDirectory)
    If (directory <> "" Or result <> True) Then sPath = sheetn.Cells(i, 2).Text
    Call toJPG(sPath, filename, sheetn.Cells(i, 4).Text, i, sheet1)
a1:
  Next i
End Sub

Für PNG

Option Explicit

Sub toPNG(ByVal directory, ByVal filename, ByVal url, ByVal i, ByVal sheetn As String)
  On Error GoTo myerror:
    Dim sheet1 As Worksheet
    Set sheet1 = Sheets(sheetn)
    Dim sPath As String, WSH As Variant
    Set WSH = CreateObject("WScript.Shell")
    sPath = WSH.SpecialFolders("Desktop") & "\"
    If (directory = "") Then directory = sPath
    If (Right(directory, 1) <> "\") Then directory = directory & "\"
    If (filename = "") Then filename = Format(Now(), "yyyy-mm-dd-hh-mm-ss")
    Dim savepath As String
    savepath = directory & filename & ".png "
    Dim driver As New Selenium.ChromeDriver
    driver.SetPreference "download.default_directory", directory
    driver.SetPreference "download.directory_upgrade", True
    driver.SetPreference "download.prompt_for_download", False
    driver.SetPreference "safebrowsing.enabled", True
    driver.SetPreference "plugins.plugins_disabled", Array("Chrome PDF Viewer")
    driver.AddArgument "headless"
    driver.AddArgument "disable-gpu"
    driver.AddArgument "hide-scrollbars"
    Dim w As Long
    Dim h As Long
    
    driver.Start
    driver.Get url
    driver.FindElementByClass("tab02").Click
    driver.ExecuteScript ("this.document.getElementById('tab01').setAttribute('class','tabContent01');")
    driver.ExecuteScript ("this.document.getElementById('tab03').setAttribute('class','tabContent03');")
    w = driver.ExecuteScript("return document.body.scrollWidth")
    h = driver.ExecuteScript("return document.body.scrollHeight")
    driver.Window.SetSize w, h
    driver.TakeScreenshot.SaveAs savepath
    sheet1.Cells(i, 5).Value = 1
    sheet1.Cells(i, 6).Value = savepath
    driver.Quit
    Exit Sub
myerror:
    
    sheet1.Cells(i, 5).Value = 0
End Sub
Sub dopng()
  Dim sPath As String, WSH As Variant
    Set WSH = CreateObject("WScript.Shell")
    sPath = WSH.SpecialFolders("Desktop") & "\"
    Dim directory As String
    Dim filename As String
    directory = sPath
    If (Right(Len(directory), 1) <> "\") Then directory = directory & "\"
    
  Dim sheet1 As String
  Dim i As Long
  
  sheet1 = "Für png"
  
  Dim sheetn As Worksheet
  Set sheetn = Sheets(sheet1)
  Dim r As Long
  r = sheetn.Cells(Rows.Count, 4).End(xlUp).Row
  For i = 2 To r
    If (sheetn.Cells(i, 4).Value = "") Then
      GoTo a1:
    End If
    filename = sheetn.Cells(i, 3).Text
    If (filename = "") Then filename = Format(Now(), "yyyy-mm-dd-hh-mm-ss")
    Dim result
    result = Dir(sheetn.Cells(i, 2).Text, vbDirectory)
    If (directory <> "" Or result <> True) Then sPath = sheetn.Cells(i, 2).Text
    Call toPNG(sPath, filename, sheetn.Cells(i, 4).Text, i, sheet1)
a1:
  Next i
End Sub

Die Buchstruktur besteht aus drei "pdf" -, "png" - und "jpg" -Blättern.

B-, C-, D-Spalten nach der zweiten Zeile Geben Sie das Speicherziel, den Speichernamen und die URL ein Es wird gespeichert, wenn Sie das Makro verschieben.

Übrigens können Sie das DOM auch mit driver.executescirpts usw. bearbeiten, sodass Sie die Webseite nach dem Spielen damit erfassen können.

schläfrig. .. .. Außerdem werde ich später ein Foto anhängen.

Recommended Posts

So konvertieren Sie Webseiten mit VBA (Excel) (Selenium Basic) in PDF, PNG, JPG
Konvertieren Sie PDF-Dateien mit GIMP in PNG-Dateien
Konvertieren Sie A4 PDF alle 2 Seiten in A3
Konvertieren Sie PDF in Image mit ImageMagick
Aktiviert, um PNG mit Pillow of Python in JPG zu konvertieren
Konvertieren Sie mit pdfplumber von PDF in CSV
Konvertieren Sie Excel-Daten mit Python in JSON
DICOM zu PNG Konvertierung mit aufsteigend und absteigend
[Python] Wie man Excel-Dateien mit Pandas liest
Konvertieren Sie die SVG-Datei mit Python in png / ico
Konvertieren Sie mehrere JPG-Dateien in eine PDF-Datei
Konvertieren von (32,32,3) in einen 4-dimensionalen Tensor (1,32,32,1) mit ndarray-Typ
Automatische Anmeldung bei ServiceNow mit Selenium Web Driver
So konvertieren / wiederherstellen Sie einen String mit [] in Python
So konvertieren Sie horizontal gehaltene Daten mit Pandas in vertikal gehaltene Daten
So konvertieren Sie ein Klassenobjekt mit SQLAlchemy in ein Wörterbuch
So konvertieren Sie eine JSON-Datei mit Python Pandas in eine CSV-Datei
So konvertieren Sie Json-Dateien in das CSV- oder EXCEL-Format
So wechseln Sie mit Python + Selenium + Chrome in den Smartphone-Modus
Hinweise zum Betrieb von Firefox mit Selen unter Windows
Konvertieren Sie 202003 bis 2020-03 mit Pandas
Wie man Selen debuggt
Konvertieren Sie json in Excel
So stellen Sie eine mit Flask erstellte Web-App für Heroku bereit
So setzen Sie einen Hyperlink zu "file: // hogehoge" mit sphinx-> pdf
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
So geben Sie ein Dokument im PDF-Format mit Sphinx aus
So laden Sie keine Bilder, wenn Sie PhantomJS mit Selen verwenden
So manipulieren Sie das DOM im Iframe mit Selen
Konvertieren Sie verstümmelte gescannte Bilder mit Pillow und PyPDF in PDF
Einführung in Python für VBA-Benutzer - Aufrufen von Python aus Excel mit xlwings-
Wie man mit Pythons Selen in Sekundenschnelle kratzt
Lesen einer Excel-Datei (.xlsx) mit Pandas [Python]