Python VBA, um mit Selenium die gesamte WEB-Seite zu erfassen

Python VBA, um mit Selenium die gesamte WEB-Seite zu erfassen

Punkt

① Verwenden Sie Chrom ② Mach es kopflos ③ Ermitteln Sie die vertikalen und horizontalen Längen für jede Seite mit Javascript, legen Sie sie fest und erhalten Sie eine Aufnahme. ④ Wenn Sie der Meinung sind, dass die Website plötzlich eine Zeitüberschreitung aufweist, können Sie Chrome neu starten.

Anfragen zur Erfassung von Captures kommen plötzlich, daher müssen Sie darauf achten, dass Sie keine Captures schnell verpassen. Stellen Sie zu diesem Zweck sicher, dass die Erfassung am Ende im angegebenen Ordner erfolgt. Wenn das Zeitlimit überschritten ist, starten Sie Chrome neu und Sie können mit der Erfassung fortfahren. Dies ist der einfachste Weg, um schnell ein Programm zu schreiben. Das ist aber ziemlich gut.

■ Umgebung ・ Windodws10 ・ Python 3.8.3

Holen Sie sich eine Erfassung der gesamten WEB-Seite mit Python-Selen

Erhalten Sie eine Erfassung der gesamten WEB-Seite


from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


options = Options()
options.add_argument('--hide-scrollbars') #Schalten Sie die Bildlaufleiste aus
options.add_argument('--incognito')        #Geheimmodus
options.add_argument('--headless')         #Headless (Browser verschwindet, es ist eine gute Idee, diese Option nach dem Testen hinzuzufügen)
driver = webdriver.Chrome(options=options) #Beschreibung, wenn der Pfad verläuft

try:
  WebDriverWait(self.driver, 15).until(EC.presence_of_all_elements_located)
  driver.get("https://testtesttest.com")  
 #↑ Wechseln Sie zu der zu erfassenden URL, da eine Website mit vielen Bildern und Anzeigen plötzlich einen Timeout-Fehler verursachen kann.
except Exception:
   #Schreiben Sie hier die Beschreibung des Treiberneustarts
   

#Holen Sie sich die vertikale und horizontale Größe und erhalten Sie die Aufnahme
page_width = driver.execute_script('return document.body.scrollWidth')
page_height = driver.execute_script('return document.body.scrollHeight')        
driver.set_window_size(page_width, page_height)

#Aktuelle Zeit für Dateinamen abrufen
now = datetime.datetime.now()
zikan = now.strftime('%Y%m%d_%H%M%S')
filename = "Dateiname"+ "_"+ zikan + ".jpg "   #Die Erweiterung kann ping sein

#Holen Sie sich eine Aufnahme
driver.save_screenshot("./Ordnernamen/" + filename)

#Suchen Sie bis zu 5 Sekunden lang nach einer Erfassungsdatei
start=time.time()
while time.time()-start<=5:
  if os.path.exists(./Ordnernamen/+filename):
      break      #Beenden Sie das Programm, wenn die Datei gefunden wurde
      time.sleep(1)
else:
  #Schreiben Sie, was zu tun ist, wenn die Aufnahme nicht gefunden wird

driver.quit()

Mit vba selenium Basic können Sie die gesamte Webseite erfassen

Beim Betrieb mit vba Da häufig viele Excel-Dateien ausgeführt werden, lautet das Speicherziel für die Erfassung Es wird als vollständiger Pfad anstelle eines relativen Pfads beschrieben. Nach meiner Erfahrung weisen Websites mit vielen Bildern und Anzeigen plötzlich häufige Timeout-Fehler auf. Selbst in diesem Fall wurde der Neustart mit meiner eigenen Funktion OnceMoreGet fortgesetzt, ohne anzuhalten.

Erhalten Sie eine Erfassung der gesamten WEB-Seite


Dim deiver as New ChromeDriver
Dim tate As Long
Dim yoko As Long
Dim Target as String
driver.AddArgument "headless" 'Kopflos
driver.AddArgument "disable-gpu" 'Vorübergehend benötigte Optionen. Es kann unnötig sein, aber nur für den Fall
driver.AddArgument "incognito"   'Geheimmodus
driver.AddArgument "hide-scrollbars"  'Schalten Sie die Bildlaufleiste aus

'Stellen Sie die Wartezeit für das Lesen und das Timeout auf 30 Sekunden ein
driver.Timeouts.PageLoad = 30000        
driver.Timeouts.Server = 30000
driver.Timeouts.ImplicitWait = 30000
driver.Timeouts.Script = 30000
driver.Start

'Einfach für helle Standorte, die keine Zeitüberschreitung haben
'driver.get("Seiten-URL")OK
'↓ ist eine Funktion, die neu gestartet wird, wenn nach einem Bildschirmübergang eine Zeitüberschreitung auftritt
If Not OnceMoreGet(driver, "Seiten-URL") Then     
     'Wenn der Neustart nach dem Timeout fehlschlägt, schreiben Sie hier eine Verarbeitung
End If

'Erfassungsprozess erfassen
tate = driver.ExecuteScript("return document.body.scrollHeight")
yoko = driver.ExecuteScript("return document.body.scrollWidth")
driver.Window.SetSize yoko, tate
Target = "Geben Sie hier den Dateinamen mit dem vollständigen Pfad ein"

'Screenshot: Hier liegt möglicherweise ein Fehler vor, daher ist es besser, einen Fehlervermeidungsprozess durchzuführen.
driver.TakeScreenshot.SaveAs (Target)      

'Verwenden Sie die Dir-Funktion, um zu überprüfen, ob die Erfassung möglich ist.
Dim timeout As Date
timeout = DateAdd("s", 5, Now)
Dim str As String
Do
  str = Dir(Target)
  If Now > timeout Then
     'Schreiben Sie die Verarbeitung, wenn nur die Erfassungsdatei nicht gefunden wird
  End If   
    
Loop Until str <> ""

driver.quit

'Eine Funktion, die neu gestartet wird, wenn ein Timeout-Fehler auftritt
Function OnceMoreGet(driver As ChromeDriver, url As String) As Boolean
  On Error GoTo ErrorHandler
    diver.Get (url)        
    OnceMoreGet = True
    Exit Function        
ErrorHandler:
    'Starten Sie neu, wenn eine Ausnahme auftritt
    driver.Quit
    Call WaitFor(3)
    driver.Start
    driver.Get (url)
    OnceMoreGet = True
End Function

Ein Amateur schreibt alleine. Ich würde mich über Ratschläge oder Kommentare freuen.

Recommended Posts

Python VBA, um mit Selenium die gesamte WEB-Seite zu erfassen
Holen Sie sich den Aufrufer einer Funktion in Python
Rufen Sie den im Pulldown-Menü Selenium Python VBA ausgewählten Wert ab
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
So bestimmen Sie die Existenz eines Selenelements in Python
[Python, Ruby] Selen-Holen Sie sich Webseiteninhalte mit Webdriver
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Kopieren Sie die Liste in Python
Ausgabe in Form eines Python-Arrays
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
Holen Sie sich zu jeder Tageszeit eine Datums- / Uhrzeitinstanz in Python
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
So ermitteln Sie die Anzahl der Stellen in Python
[Python] Ruft die Liste der im Modul definierten Klassen ab
Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python
Rufen Sie die URL des HTTP-Umleitungsziels in Python ab
Ein Memorandum über die Umsetzung von Empfehlungen in Python
[Python3] Machen Sie einen Screenshot einer Webseite auf dem Server und schneiden Sie sie weiter zu
[Für Anfänger] Web-Scraping mit Python "Greifen Sie auf die URL auf der Seite zu, um den Inhalt abzurufen."
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
Holen Sie sich eine Liste der mit Python + Selen gekauften DMM-E-Books
Holen Sie sich Python-Webseite, Zeichenkodierung und Anzeige
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
So erhalten Sie eine Liste der integrierten Ausnahmen für Python
Finden Sie die Eigenwerte einer reellen symmetrischen Matrix in Python
Ruft den Index jedes Elements der Verwirrungsmatrix in Python ab
Holen Sie sich die Quelle der Seite unbegrenzt mit Python zu laden.
Holen Sie sich den Desktop-Pfad in Python
Ruft den Wert eines bestimmten Schlüssels bis zum angegebenen Index der Wörterbuchliste in Python ab
Holen Sie sich Web-Screen-Capture mit Python
Holen Sie sich den Skriptpfad in Python
[OCI] Python-Skript zum Abrufen der IP-Adresse einer Recheninstanz in Cloud Shell
Klicken Sie auf die Web-API in Python
Holen Sie sich den Desktop-Pfad in Python
Holen Sie sich den Hostnamen in Python
Versuchen Sie, die Thread-Liste der Nachrichten (Abneigung) mit Python zu erhalten.
So überprüfen Sie die Speichergröße einer Variablen in Python
Lesen Sie die Standardausgabe eines Unterprozesses zeilenweise in Python
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
[Python] Ruft das Aktualisierungsdatum eines Nachrichtenartikels aus HTML ab
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
[Python] Ermittelt den Rang der Werte in der Liste in aufsteigender / absteigender Reihenfolge
So ermitteln Sie die Scheitelpunktkoordinaten eines Features in ArcPy
Ich habe ein Skript geschrieben, um Webseiten-Links in Python zu extrahieren
Rufen Sie den Wert des Dropdown-Menüs mit Python und Selen ab und legen Sie ihn fest
Erstellen Sie eine Funktion, um den Inhalt der Datenbank in Go abzurufen
Rufen Sie die Formel in der Excel-Datei als Zeichenfolge in Python ab
Ruft eine Liste der Dateien in einem Ordner mit Python ohne Pfad ab
Holen Sie sich den Titel und das Lieferdatum von Yahoo! News in Python
Überprüfen Sie das Verhalten des Zerstörers in Python
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Zeigen Sie eine Liste der Alphabete in Python 3 an
[Python] [Windows] Machen Sie eine Bildschirmaufnahme mit Python
Führen Sie den Python-Interpreter im Skript aus
Das Ergebnis der Installation von Python auf Anaconda