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.
EC2 (Amazon Linux 2 AMI)
Setting sensors (location) in headless Chrome
・ Sélénium ・ Pilote Chrome (85.0.4183.87) ・ Python3 (3.6.2)
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.
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,
},
)
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