Lorsque je grattais avec Selenium + Headless Chrome, je suis tombé sur un site où je pouvais obtenir des informations en mode tête, mais dès que je l'ai fait sans tête, j'ai eu une erreur NoSuchElementException. Il n'y avait pas beaucoup d'articles en japonais sur les solutions de contournement, donc je les posterai.
-Le grattage est possible en mode tête. -Une NoSuchElementException s'est produite dès que l'option headless a été ajoutée.
Il semble que l'élément n'ait pas été obtenu, j'ai donc vérifié la source du site avec driver.page_source.
scraping.py
driver.page_source
Le code HTML renvoyé contient les mots «Accès refusé», et il semble que l'accès à partir de headless soit refusé.
<html><head>
webapp_1 | <title>Access Denied</title>
webapp_1 | </head><body>
webapp_1 | <h1>Access Denied</h1>
webapp_1 |
webapp_1 | You don't have permission to access "http://www.xxxxxxx/" on this server.<p>
Après examen, le pilote chrome avait une option user_agent qui pouvait être prétendument accessible à partir d'un navigateur. En ajoutant cela à l'option de chromedrivere, vous pouvez obtenir l'élément en toute sécurité.
scraping.py
options = webdriver.ChromeOptions()
options.binary_location = '/usr/bin/google-chrome'
options.add_argument('--no-sandbox')
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--lang=ja-JP')
options.add_argument(f'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36') #ajouter à
c'est tout
Recommended Posts