Ich habe ein Tool zum automatischen Durchsuchen mehrerer Websites mit Selenium (Python) erstellt.

Einführung

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.

Code

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.

Bereit zu rennen

Die Falle der Version bei der Installation von Chrome Driver mit pip

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.

Ende

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.

Recommended Posts

Ich habe ein Tool zum automatischen Durchsuchen mehrerer Websites mit Selenium (Python) erstellt.
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Python einen Daemon erstellt
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich möchte automatisch an Online-Kursen mit Python + Selen teilnehmen!
Ich habe mit Python einen Zeichenzähler erstellt
Ich habe mit Python eine Hex-Map erstellt
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe mit Python einen Neuronensimulator erstellt
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ein Memorandum beim automatischen Erwerb mit Selen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe mit Python eine Bot-Wettervorhersage gemacht.
Ich habe eine GUI-App mit Python + PyQt5 erstellt
Ich habe versucht, mit Python einen Twitter-Blocker für faule Mädchen zu machen
Ich möchte ein Spiel mit Python machen
Erstellen Sie mit Mecab aus Python3 ein Tool, das Furigana automatisch mit HTML schüttelt
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
Ich habe ein Tool erstellt, um Hy nativ zu kompilieren
[Outlook] Ich habe versucht, mit Python automatisch eine tägliche Berichtsmail zu erstellen
Ich habe ein Tool erstellt, um Jupyter py mit VS Code in ipynb zu konvertieren
Ich habe ein Tool erstellt, das die Dekomprimierung mit CLI (Python3) etwas erleichtert.
Ich habe ein Tool erstellt, um neue Artikel zu erhalten
Ich möchte mit Python in eine Datei schreiben
Ich habe mit Python ein Bin-Picking-Spiel gemacht
Mattermost Bot mit Python gemacht (+ Flask)
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Ich habe versucht, mit Selenium + Python einfach ein vollautomatisches Anwesenheitssystem zu erstellen
Ich habe ein Tool zum automatischen Sichern der Metadaten der Salesforce-Organisation erstellt
Eine Geschichte, der ich nach der SFTP-Kommunikation mit Python verfallen war
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
Ich habe mit Python ein Weihnachtsbaum-Beleuchtungsspiel gemacht
Ich habe mit Python eine App für die Benachrichtigung über Netznachrichten erstellt
Ich habe ein Python-Modul erstellt, um Kommentare zu übersetzen
Ich habe eine Python3-Umgebung unter Ubuntu mit direnv erstellt.
Ich war süchtig danach, 2020 mit Selen (+ Python) zu kratzen
Ich möchte mit einem Roboter in Python arbeiten.
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Ich habe eine Python-Bibliothek erstellt, die einen rollierenden Rang hat
Ich möchte einen Quantencomputer mit Python betreiben
Ich habe einen Blackjack mit Python gemacht!
Ich habe einen Python-Text gemacht
Ich habe mit Python einen Blackjack gemacht.
Ich habe Wordcloud mit Python gemacht.
Ich habe ein System erstellt, das automatisch entscheidet, ob es morgen mit Python ausgeführt wird, und es zu Google Kalender hinzufügt.
Ich habe ein Programm erstellt, um Bilder mit Python und OpenCV in ASCII-Grafik umzuwandeln
Ich habe versucht, automatisch die Zeichenfolge zu generieren, die mit Python in Mr. Adjustment eingegeben werden soll
[Python] Ich habe versucht, automatisch einen täglichen Bericht über YWT mit Outlook-Mail zu erstellen
Erstellen Sie einen Mastodon-Bot mit einer Funktion, die automatisch mit Python antwortet