Si vous laissez le module Python tel qu'il a été livré, la livraison peut rester bloquée.
Cette fois, nous utiliserons un module appelé chromedriver-binary comme exemple. Le rôle de chromedriver-binary est de vous permettre de faire fonctionner le navigateur Chrome via Python. Le chromedriver-binary doit être installé pour le navigateur Chrome. Le navigateur Chrome se mettra à jour sans autorisation, vous n'avez donc rien à faire Finalement, chromedriver-binary ne sera plus pris en charge et les livraisons s'arrêteront. Vous pouvez utiliser la mise à jour automatique du module dans un tel endroit.
Auparavant, je pouvais utiliser la méthode de détournement du code de \ _ \ _ init \ _ \ _. Py de pip. Il est devenu inutilisable après la nouvelle version de pip. Si vous regardez la console Pycharm etc., vous trouverez des conseils sur la nouvelle méthode.
Traduit "Veuillez exécuter la commande pip directement" Je pense que c'était une histoire comme ça.
Si vous pouvez facilement résumer le mécanisme Cela signifie que vous devez exécuter "pip install ***" autour du sous-processus. Il a été confirmé qu'il peut être utilisé de cette manière même si vous utilisez venv.
Lorsque ce qui précède est résumé dans une fonction, cela ressemble à ceci.
installer.py
import sys
import subprocess
def install_module(module: str, ver: str = None):
"""
Installez le module spécifié (la version peut être spécifiée)
:param module:Nom du module
:param ver:Version du module
:return:
"""
#Ajouter des options si la version est spécifiée
if ver is not None:
ver = f"=={ver}"
else:
ver = ""
#Effectuer les travaux d'installation
try:
command = f"pip install {module}{ver}"
subprocess.call(command, shell=True)
except Exception:
sys.exit(-1)
Mettez le code ci-dessus dans le programme et vous avez terminé! !! Ce n'est pas aussi simple que ... Puisque l'en-tête est "Mécanisme ①", il y a toujours ② et ③.
Utilisez-le comme suit.
sample_1.py
try:
driver = webdriver.Chrome()
except:
install_module("chromedriver-binary", "86.0.4240.22.0")
Il installera le module spécifié lorsqu'il s'écoulera sauf ... Le contenu de la variable de pilote n'est toujours pas défini.
sample_2.py
try:
driver = webdriver.Chrome()
except:
install_module("chromedriver-binary", "86.0.4240.22.0")
driver = webdriver.Chrome()
Si c'est le cas, il ne semble y avoir aucun problème dans le code, mais ... driver = webdriver.Chrome () Ce code est Sur quel chromedriver-binary est-il basé? -Est-ce le chromedriver-binary au moment où l'importation chromedriver-binary est déclarée? -Est-ce un binaire chromedriver nouvellement installé? Cela dépend de la méthode de mise en œuvre, mais pour autant que je l'ai vérifié, cela semble fonctionner avec le premier.
Vous pouvez le recharger en utilisant importlib.reload (nom du module) etc. Il existe également un moyen de redémarrer le fichier py lui-même, La partie qui n'est pas liée à la ligne principale du programme devient gênante. Le redémarrage du fichier py mettra fin au processus du fichier py une fois. S'il y a quelque chose dans le système qui attend la fin du processus Il y a beaucoup de choses gênantes telles que le démarrage du processus suivant même si le processus du fichier py n'est pas terminé.
La chose la plus simple à laquelle j'ai pensé était de faire le lot suivant.
run.bat
Pour vérifier le module py.py
py pour le traitement principal.py
Si vous utilisez un fichier batch ① Si vous attendez la fin du traitement et passez à l'étape suivante, attendez la fin du fichier de commandes avant de passer à l'étape suivante. (2) Le processus principal peut être rationalisé en faisant la vérification du module et le processus principal des fichiers py séparés. ③ Lorsque vous exécutez l'installation avec .py pour vérifier le module Vous pouvez maintenir le module à jour lorsque vous exécutez le traitement principal .py
Si vous pouvez vous exercer sur l'appareil ① et l'appareil ②, vous pouvez l'utiliser pour installer / mettre à jour le module. Malheureusement, il ne suffit toujours pas de l'utiliser pour mettre à jour le chromedriver-binary. D'après ce que j'ai vérifié vers 2018, chromedriver-binary ne fonctionne pas avec le dernier installé. Vous devez savoir quelle version vous souhaitez installer et la donner comme argument.
Vous pouvez le voir en donnant la version principale du navigateur Chrome à l'URL de ↓ et en ouvrant l'URL https://chromedriver.storage.googleapis.com/LATEST_RELEASE_{chromeブラウザのメジャーバージョン} Exemple: https://chromedriver.storage.googleapis.com/LATEST_RELEASE_86
Alors, comment connaître la version du navigateur Chrome? C:\Program Files (x86)\Google\Chrome\Application Ou C:\Program Files\Google\Chrome\Application Si vous regardez, vous pouvez trouver le dossier avec le numéro de version. Vous pouvez obtenir le numéro de version en le coupant bien.
Cependant, étant donné que tout ce dont vous avez besoin est la version principale, il vous suffit de récupérer la version principale, ce qui convient aux opérations de chaîne. En résumé, ça ressemble à ça.
installer.py
import sys
import re
import requests
import subprocess
def get_lastrelease_chromedriver():
"""
Obtenez la dernière version de chromedriver pour votre navigateur Chrome
:return:
"""
#Obtenez la version du navigateur Chrome installé
try:
res = subprocess.Popen('dir /B /O-N "C:\Program Files (x86)\Google\Chrome\Application" | findstr "^[0-9].*\>"', stdout=subprocess.PIPE, shell=True).communicate()
target = str(res[0])
pattern = r'[0-9]+\.'
match = re.search(pattern, target)
if match is None:
# [Pour 32 bits]
res = subprocess.Popen('dir /B /O-N "C:\Program Files\Google\Chrome\Application" | findstr "^[0-9].*\>"', stdout=subprocess.PIPE, shell=True).communicate()
if len(res) < 1:
raise Exception("échec de la commande de vérification de la version du navigateur chrome")
target = str(res[0])
pattern = r'[0-9]+\.'
match = re.search(pattern, target)
if match is None:
sys.exit(-1)
chrome_ver = match.group(0).replace('.', '')
except:
return None
#Demandez au service WEB la version du pilote Chrome
try:
api = "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_{}"
ver = requests.get(api.format(chrome_ver)).text
except:
return None
return ver
Si vous l'incorporez dans le module de confirmation .py, cela ressemblera à ↓
Pour vérifier le module.py
try:
driver = webdriver.Chrome()
except:
ver = get_lastrelease_chromedriver()
install_module("chromedriver-binary", ver)
Vous devriez maintenant pouvoir mettre à jour automatiquement le binaire chromedriver.
Recommended Posts