① 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
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()
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.