Ich habe eine Textdatei mit der URL erhalten, die ich durchsuchen möchte, und ein Tool erstellt, das automatisch durchsucht wird. Der Punkt, über den ich mich besonders Gedanken gemacht habe, ist youtube und yahoo usw. ** Auch auf Seiten, auf denen der Inhalt beim Scrollen zunimmt Entsprechender Punkt **. Ich bin froh, wenn Sie es als Referenz verwenden können.
AutoBrowsing.py
import os
import re
import sys
import time
import chromedriver_binary
import requests
from selenium import webdriver
# ***Hauptfunktion(Die Ausführung ist unten) ***
def main():
#Empfang der URL-Listendatei
input_path = input_urls_file()
#URL-Liste aus Datei abrufen
url_list = get_url_list(input_path)
#Validierung von URLs in der URL-Liste
validate_url(url_list)
#Empfang der Browsing-Bestätigung
confirm_browsing()
#Surfen
browsing_urls(url_list)
# ***Funktion, die die Eingabe einer URL-Listendatei akzeptiert***
def input_urls_file():
print("\n########## Start processing ##########")
print("Input filepath of urls : ")
#Dateieingabe akzeptieren(vollständigen Pfad)
input_path = input()
print("\nCheck input file ...\n")
#Überprüfung der Dateiexistenz
if os.path.exists(input_path):
print(' [OK]: File exists. : ' + input_path)
#Beenden Sie, wenn die Datei nicht vorhanden ist
else:
print(" [ERROR]: File doesn't exist! : " + input_path)
print("\nSystem Exit.\n")
sys.exit()
return input_path
# ***Funktion zum Abrufen der URL-Liste aus der Datei***
def get_url_list(input_path):
#Datei öffnen
targetFile = open(input_path)
#Liste der URLs nach Zeile
url_list = targetFile.readlines()
#Datei schließen
targetFile.close()
return url_list
# ***Funktionen, die URL-Schemata und Statuscodes validieren***
def validate_url(url_list):
print("\nCheck url scheme and status code ...\n")
#Fehlerflag
hasError = False
for url in url_list:
# Tips:readlines()Da der Zeilenvorschubcode an eine eingelesene Zeile angehängt ist, löschen Sie ihn
unsafe_url = url.rstrip()
#URL-Schemamuster
URL_PTN = re.compile(r"^(http|https)://")
#Fehler, wenn das Muster nicht übereinstimmt
if not (URL_PTN.match(unsafe_url)):
print(" [ERROR]: Url isn't valid! : " + unsafe_url)
hasError = True
#Fordern Sie keine URL an, wenn das Schema falsch ist
continue
#Anfrage an URL, wenn das Schema korrekt ist
r = requests.get(unsafe_url)
#Der Statuscode lautet 200(200 auch bei Weiterleitung)Sonst ein Fehler
if (r.status_code != 200):
print(" [ERROR]: Status code isn't 200! : [" +
r.status_code + "]:" + unsafe_url)
hasError = True
#Beenden Sie das Programm, wenn das Schema falsch ist oder wenn der Statuscode nicht 200 ist
if hasError:
print("\nSystem Exit.\n")
sys.exit()
print(" [OK]: All urls are valid and 200.")
print(" [OK]: Number of urls : " + str(len(url_list)))
# ***Funktion, die Eingaben akzeptiert, um das Surfen zu starten***
def confirm_browsing():
# Yes/Endlosschleife außer Nr
while True:
print("\nStart browsing? y/n (default:y)")
#Alle Eingaben werden als Kleinbuchstaben akzeptiert(Einfach zu vergleichen)
confirm_cmd = input().lower()
#Standard(Enter)Nur als y behandeln
if ((confirm_cmd == "") or (confirm_cmd == "y")):
break
elif ((confirm_cmd == "n")):
print("\nSystem Exit.\n")
sys.exit()
else:
pass
# ***Funktion zum Durchsuchen***
def browsing_urls(url_list):
options = webdriver.ChromeOptions()
#Maximieren Sie Ihren Browser
options.add_argument("--start-maximized")
#Festlegen einer Option zum Deaktivieren von "Chrome wird von einer automatisierten Testsoftware gesteuert."
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options)
print("\n===== start =====")
#Öffnen Sie den Browser zeilenweise
for i, url in enumerate(url_list):
#Geben Sie die Anzahl der URLs aus, die in der gesamten URL-Liste angezeigt werden
print(" " + str(i+1) + "/" + str(len(url_list)))
#Zugriffs-URL
driver.get(url)
#↓ Wenn es in jeder URL einen Prozess gibt, den Sie ausführen möchten, ändern Sie die hier aufzurufende Funktion
#Verarbeitung, um jede URL nach unten zu scrollen
scrolle_to_end(driver)
print("===== end =====\n")
#Ende
driver.quit()
print("Complete.\n")
# ***Eine Funktion, die zum Ende der Seite scrollt***
def scrolle_to_end(driver):
#Bildlaufgeschwindigkeit(Geben Sie 1 oder mehr an)
SCROLL_SPEED = 3
while not is_scrolle_end(driver):
# 0.Warten Sie 5 Sekunden(Grundsätzlich unnötig, wird aber verwendet, wenn das Laden langsam ist)
# time.sleep(0.5)
#Blättern Sie nach dem relativen Wert
driver.execute_script("window.scrollBy(0, "+str(SCROLL_SPEED)+");")
#Warten Sie 1 Sekunde
time.sleep(1)
# ***Eine Funktion, die bestimmt, ob Sie nach unten gescrollt haben oder nicht***
def is_scrolle_end(driver):
#Holen Sie sich die Nummer, wenn Sie nach unten scrollen(window.innere Höhe Minuten(Für den Bildschirmanzeigebereich)Ziehen, weil es nicht scrollt)
script = "return " + str(get_page_height(driver)) + \
" - window.innerHeight;"
page_most_bottom = driver.execute_script(script)
#Bildlaufbetrag abrufen(Die Erfassungsmethode unterscheidet sich je nach Typ und Version des Browsers.)
script = "return window.pageYOffset || document.documentElement.scrollTop;"
scroll_top = driver.execute_script(script)
is_end = scroll_top >= page_most_bottom
return is_end
# ***Funktion zum Abrufen der Seitenhöhe***
def get_page_height(driver):
#Nehmen Sie den Maximalwert, der von der Browserversion und der Site abhängt
# https://ja.javascript.info/size-and-scroll-window#ref-633
# Tips:Wenn Sie eine Zeichenfolge in mehrere Zeilen ohne Zeilenumbrüche schreiben möchten()Umgeben mit
script = ("return Math.max("
"document.body.scrollHeight, document.documentElement.scrollHeight,"
"document.body.offsetHeight, document.documentElement.offsetHeight,"
"document.body.clientHeight, document.documentElement.clientHeight"
");")
height = driver.execute_script(script)
return height
#Ausführung der Hauptfunktion
main()
↓ Beispiel-Eingabedatei
test_url_list.txt
https://www.google.com/
https://qiita.com/
https://www.youtube.com/
https://www.yahoo.co.jp/
↓ Laufzeitkonsole
########## Start processing ##########
Input filepath of urls :
c:\Users\hoge\Desktop\work\python\AutoBrowsing\test_url_list.txt
Check input file ...
[OK]: File exists. : c:\Users\hoge\Desktop\work\python\AutoBrowsing\test_url_list.txt
Check url scheme and status code ...
[OK]: All urls are valid and 200.
[OK]: Number of urls : 4
Start browsing? y/n (default:y)
===== start =====
1/4
2/4
3/4
4/4
===== end =====
Complete.
Wenn Sie beim Scannen von Chrome mit Selen mit pip installieren, führt die einfache Installation mit dem Befehl pip install chromedriver-binary
zu einem ** Versionsproblem und einem Laufzeitfehler. ** **.
Bitte geben Sie die Version zum Zeitpunkt der Installation an.
Selbst wenn Sie ohne Angabe der Version installieren, wird die vorherige automatisch deinstalliert, wenn Sie durch Angabe der Version installieren.
Dieses Mal haben wir nach dem automatischen Starten des Browsers nach unten gescrollt. Das Akzeptieren einer Liste und das Verarbeiten dieser URL scheint wiederverwendbar zu sein, daher werde ich versuchen, etwas anderes zu erstellen.