J'ai reçu un fichier texte contenant l'URL que je souhaite parcourir et j'ai créé un outil qui navigue automatiquement. Le point sur lequel j'étais particulier est youtube et yahoo, etc. ** Également sur les pages où le contenu augmente à mesure que vous faites défiler Point correspondant **. Je suis heureux que vous puissiez l'utiliser comme référence.
AutoBrowsing.py
import os
import re
import sys
import time
import chromedriver_binary
import requests
from selenium import webdriver
# ***fonction principale(L'exécution est en bas) ***
def main():
#Réception du fichier de liste d'URL
input_path = input_urls_file()
#Obtenir la liste des URL à partir du fichier
url_list = get_url_list(input_path)
#Validation des URL dans la liste des URL
validate_url(url_list)
#Réception de la confirmation de navigation
confirm_browsing()
#navigation
browsing_urls(url_list)
# ***Fonction qui accepte l'entrée du fichier de liste d'URL***
def input_urls_file():
print("\n########## Start processing ##########")
print("Input filepath of urls : ")
#Accepter l'entrée de fichier(chemin complet)
input_path = input()
print("\nCheck input file ...\n")
#Vérification de l'existence du fichier
if os.path.exists(input_path):
print(' [OK]: File exists. : ' + input_path)
#Quitter si le fichier n'existe pas
else:
print(" [ERROR]: File doesn't exist! : " + input_path)
print("\nSystem Exit.\n")
sys.exit()
return input_path
# ***Fonction pour obtenir la liste des URL à partir du fichier***
def get_url_list(input_path):
#Fichier ouvert
targetFile = open(input_path)
#Liste des URL par ligne
url_list = targetFile.readlines()
#Fermer le fichier
targetFile.close()
return url_list
# ***Fonctions qui valident les schémas d'URL et les codes d'état***
def validate_url(url_list):
print("\nCheck url scheme and status code ...\n")
#Indicateur d'erreur
hasError = False
for url in url_list:
# Tips:readlines()Le code de saut de ligne étant attaché à une ligne lue, supprimez-le
unsafe_url = url.rstrip()
#Modèle de schéma d'URL
URL_PTN = re.compile(r"^(http|https)://")
#Erreur si le motif ne correspond pas
if not (URL_PTN.match(unsafe_url)):
print(" [ERROR]: Url isn't valid! : " + unsafe_url)
hasError = True
#Ne demandez pas d'URL si le schéma est incorrect
continue
#Demande à l'URL si le schéma est correct
r = requests.get(unsafe_url)
#Le code d'état est 200(200 même avec redirection)Sinon une erreur
if (r.status_code != 200):
print(" [ERROR]: Status code isn't 200! : [" +
r.status_code + "]:" + unsafe_url)
hasError = True
#Quittez si le schéma est incorrect ou si le code d'état est autre que 200
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)))
# ***Fonction qui accepte l'entrée pour commencer la navigation***
def confirm_browsing():
# Yes/Boucle infinie sauf Non
while True:
print("\nStart browsing? y/n (default:y)")
#Toutes les entrées sont acceptées en minuscules(Facile à comparer)
confirm_cmd = input().lower()
#Défaut(Enter)Traiter uniquement comme y
if ((confirm_cmd == "") or (confirm_cmd == "y")):
break
elif ((confirm_cmd == "n")):
print("\nSystem Exit.\n")
sys.exit()
else:
pass
# ***Fonction pour effectuer la navigation***
def browsing_urls(url_list):
options = webdriver.ChromeOptions()
#Maximisez votre navigateur
options.add_argument("--start-maximized")
#Spécification d'une option pour désactiver "Chrome est contrôlé par un logiciel de test automatisé".
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options)
print("\n===== start =====")
#Ouvrez le navigateur ligne par ligne
for i, url in enumerate(url_list):
#Sortie du nombre d'URL affichées dans toute la liste d'URL
print(" " + str(i+1) + "/" + str(len(url_list)))
#URL d'accès
driver.get(url)
#↓ S'il y a un processus que vous voulez faire dans chaque URL, changez la fonction à appeler ici
#Traitement pour faire défiler chaque URL vers le bas
scrolle_to_end(driver)
print("===== end =====\n")
#Fin
driver.quit()
print("Complete.\n")
# ***Une fonction qui défile vers le bas de la page***
def scrolle_to_end(driver):
#Vitesse de défilement(Spécifiez 1 ou plus)
SCROLL_SPEED = 3
while not is_scrolle_end(driver):
# 0.Attendez 5 secondes(Fondamentalement inutile, mais utilisé lorsque le chargement est lent)
# time.sleep(0.5)
#Faire défiler par valeur relative
driver.execute_script("window.scrollBy(0, "+str(SCROLL_SPEED)+");")
#Attendez 1 seconde
time.sleep(1)
# ***Une fonction qui détermine si vous avez ou non défilé vers le bas***
def is_scrolle_end(driver):
#Obtenez le numéro en faisant défiler vers le bas(window.Minutes de hauteur intérieure(Pour la zone d'affichage de l'écran)Tirez parce qu'il ne défile pas)
script = "return " + str(get_page_height(driver)) + \
" - window.innerHeight;"
page_most_bottom = driver.execute_script(script)
#Obtenez le montant du défilement(La méthode d'acquisition diffère selon le type et la version du navigateur.)
script = "return window.pageYOffset || document.documentElement.scrollTop;"
scroll_top = driver.execute_script(script)
is_end = scroll_top >= page_most_bottom
return is_end
# ***Fonction pour obtenir la hauteur de la page***
def get_page_height(driver):
#Prenez la valeur maximale car elle dépend de la version du navigateur et du site
# https://ja.javascript.info/size-and-scroll-window#ref-633
# Tips:Si vous souhaitez écrire une chaîne de caractères sur plusieurs lignes sans saut de ligne()Entourez de
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
#Exécution de la fonction principale
main()
↓ Exemple de fichier d'entrée
test_url_list.txt
https://www.google.com/
https://qiita.com/
https://www.youtube.com/
https://www.yahoo.co.jp/
↓ Console d'exécution
########## 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.
Si vous installez avec pip lors de la numérisation de Chrome avec du sélénium, une simple installation avec la commande pip install chromedriver-binary
entraînera un problème de version ** et une erreur d'exécution. ** **
Veuillez spécifier la version au moment de l'installation.
Même si vous installez sans spécifier la version, si vous installez en spécifiant la version, la précédente sera automatiquement désinstallée.
Cette fois, après avoir lancé le navigateur automatiquement, nous avons effectué le processus de défilement vers le bas. Le processus d'acceptation d'une liste et d'exécution de certains traitements sur cette URL semble être réutilisable, je vais donc essayer de créer autre chose.