Comment définir l'emplacement du navigateur dans Headless Chrome

Lors du scraping, le site peut demander les informations de localisation (géographique) de votre navigateur. Cet article est une note personnelle sur la solution lors de l'utilisation de Selenium + Headless Chrome + Python.

environnement

EC2 (Amazon Linux 2 AMI)

référence

Setting sensors (location) in headless Chrome

outil

・ Sélénium ・ Pilote Chrome (85.0.4183.87) ・ Python3 (3.6.2)

Pourquoi vous avez besoin d'informations de localisation

Une erreur se produit lorsque vous essayez de gratter un certain site à l'aide de Headless Chrome. Lorsque j'ai vérifié la capture d'écran, la fenêtre contextuelle suivante s'est affichée et je n'ai pas pu accéder à la page spécifiée.

__ * "Le traitement est impossible car les informations de localisation n'ont pas pu être obtenues. Veuillez autoriser les informations de localisation." * __

À la suite de diverses enquêtes, il semble que la cause était que les informations de localisation du navigateur n'ont pas pu être confirmées.

Comment définir les informations de localisation dans Headless Chrome

J'ai donc cherché un moyen de définir les informations de localisation dans Headless Chrome, mais il y a étonnamment peu d'informations. .. ..

Je me demandais s'il y avait un moyen de définir les informations de localisation dans le navigateur Chrome en premier lieu, alors quand je l'ai recherché, il semble qu'il puisse être défini à partir des outils de développement.

Alors, quand je me demandais, "N'est-il pas possible de résoudre le problème si les outils de développement peuvent être utilisés même avec du chrome sans tête?", Il y avait une personne qui posait la même question dans Stack overflow, et une solution a été présentée. Apparemment, il utilise une méthode appelée execute_cdp_cmd ().

execute_cdp_cmd() Il semble que vous puissiez définir l'outil Google Developper avec la méthode selenium.webdriver.

Un exemple d'implémentation de code est ci-dessous

location_setting.py


from selenium import webdriver

def start_chrome_driver():
	options = webdriver.ChromeOptions()
	options.add_argument("--headless")
	options.add_argument("--disable-gpu")
	# executable_Veuillez changer le chemin en fonction de chaque environnement
	driver = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver", chrome_options=options)
	return driver

#Lancer Chrome sans tête
driver = start_chrome_driver()

#Autoriser la définition des informations de localisation (les informations de localisation ne peuvent pas être définies sans autorisation)
driver.execute_cdp_cmd(
    "Browser.grantPermissions",
    {
        "origin": "https://hromssp.obc.jp/",
        "permissions": ["geolocation"]
    },
)

#Erreur de latitude, longitude, latitude / longitude(Unité: m)Mettre en place
driver.execute_cdp_cmd(
    "Emulation.setGeolocationOverride",
    {
        "latitude": 35.689487,
        "longitude": 139.691706,
        "accuracy": 100,
    },
)

résultat

Vous pouvez maintenant définir les informations de localisation (usurpation d'identité?) Dans Headless Chrome, et vous pouvez accéder à la page que vous souhaitez gratter!

Recommended Posts

Comment définir l'emplacement du navigateur dans Headless Chrome
Comment supprimer des pages dont l'accès est refusé dans Selenium + Headless Chrome
Comment télécharger des fichiers depuis Selenium of Python dans Chrome
Comment développer en Python
Comment importer la bibliothèque Python configurée dans EFS dans Lambda
Comment définir l'attribut de classe html dans le formulaire forms.py de Django
[Python] Comment faire PCA avec Python
Comment gérer une session dans SQLAlchemy
Comment utiliser les classes dans Theano
Comment écrire sobrement avec des pandas
Comment collecter des images en Python
Comment mettre à jour Spyder dans Anaconda
Comment utiliser SQLite en Python
Comment convertir 0,5 en 1056964608 en un seul coup
Comment refléter CSS dans Django
Comment tuer des processus en vrac
Comment utiliser Mysql avec python
Comment envelopper C en Python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Comment exécuter du code TensorFlow 1.0 en 2.0
Comment gérer le japonais avec Python
Comment se connecter à Docker + NGINX
Comment appeler PyTorch dans Julia
Comment définir la résolution de sortie pour chaque image clé dans Blender
Comment utiliser les colonnes calculées dans CASTable
[Blender] Comment définir shape_key avec un script
[Introduction à Python] Comment utiliser la classe en Python?
Comment supprimer l'erreur d'affichage dans matplotlib
Comment vérifier le GAE local à partir du navigateur iPhone dans le même LAN
Comment définir dynamiquement des variables en Python
Comment définir optuna (comment écrire un espace de recherche)
Comment faire R chartr () en Python
Comment convertir csv en tsv dans la CLI
Comment configurer SVM à l'aide d'Optuna
Comment régler l'heure du serveur sur l'heure japonaise
Comment supprimer des sessions expirées dans Django
[Itertools.permutations] Comment créer une séquence en Python
Comment utiliser Google Test en langage C
Pour définir le codage par défaut sur utf-8 en python
Comment implémenter un sérialiseur imbriqué avec drf-flex-fields
Comment utiliser BigQuery en Python
Comment configurer XG Boost à l'aide d'Optuna
Comment exécuter des commandes avec Jupyter Notebook
Comment faire 'git fetch --tags' dans GitPython
Comment obtenir stacktrace en python
Comment afficher la table quatre-vingt-dix-neuf en python
Comment extraire une zone de polygone en Python
Comment réattribuer un index dans pandas dataframe
Comment vérifier la version d'opencv avec python
Comment activer SSL (TLS) dans Apache
Comment utiliser l'interpréteur d'Anaconda avec PyCharm
Comment spécifier une cible non vérifiée dans Flake8
[Python] Comment définir la taille de la fenêtre (cliente) dans le navigateur avec Selenium
Comment gérer des valeurs consécutives dans MySQL
Comment changer de version de Python dans cloud9
Comment régler le contraste de l'image en Python
Comment utiliser __slots__ dans la classe Python
Comment remplir dynamiquement des zéros avec Python