J'ai essayé d'obtenir les informations de la page après m'être connecté à l'aide de Goutte la dernière fois, mais j'ai été vaincu par l'authentification d'image. https://qiita.com/shioharu_/private/818154ac145c78076487
Alors cette fois, je vais changer de méthode et gratter avec Selenium + Python!
Utilisation de Vagrant et VirtualBox sur Windows 10 Présentez Selenium, Python, Chrome Driver à CentOS 7.0 dans un environnement virtuel.
Présenté en référence à la sagesse de nos prédécesseurs. https://worklog.be/archives/3422
sample.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
driver = webdriver.Chrome(options=options)
driver.get('https://www.yahoo.co.jp/')
driver.save_screenshot('test.png')
driver.quit()
Exécuter
python sample.py
La première page de Yahoo a été capturée en toute sécurité, donc l'exemple semble correct!
La dernière fois, j'avais une authentification d'image et je ne pouvais pas afficher l'écran après la connexion. Selenium a un processus de veille, donc si vous vous connectez manuellement pendant ce temps, vous devriez pouvoir accéder à la page d'authentification d'image! J'ai pensé, mais j'ai trouvé qu'en spécifiant le chemin du profil de Chrome, il maintiendra l'état du profil spécifié. https://rabbitfoot.xyz/selenium-chrome-profile/
Après tout, il vous suffit de spécifier le chemin du profil lorsque vous êtes manuellement connecté à l'avance. Merci d'être concis.
Puisque j'utilise CentOS, qui est un environnement virtuel, j'ai pensé que si je mets un lien symbolique de l'environnement Windows sur la destination de montage, il sera référencé à partir de là.
mklink /J "C:\Users\[Nom d'utilisateur]\Desktop\work\vagrant\User Data" "C:\Users\[Nom d'utilisateur]\AppData\Local\Google\Chrome\User Data"
Réécrivons la source de l'échantillon et exécutons-la
sample2.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
options.add_argument('--user-data-dir=Chemin de profil avec lien symbolique')
driver = webdriver.Chrome(options=options)
driver.get('https://p.eagate.573.jp/game/2dx/27/ranking/weekly.html')
driver.save_screenshot('test2.png')
driver.quit()
Il y a eu une capture impitoyable d'une image non connectée ...
La cause était que la référence de chemin de profil ne fonctionnait pas correctement. Il y a une différence entre le profil de chrome installé dans l'environnement virtuel et le profil de chrome côté windows ... Il n'y a donc aucun intérêt à lier de force dans un environnement virtuel, je voudrais donc installer Python et Selenium du côté Windows et les exécuter.
Référence: https://mylife8.net/install-selenium-and-run-on-windows/
Python https://www.python.org/downloads/ Aucune remarque particulière car il ne suit que l'installateur
Selenium Après avoir installé Python, vous pouvez l'installer en exécutant ce qui suit à partir de l'invite de commande.
ChromeDriver https://sites.google.com/a/chromium.org/chromedriver/downloads Téléchargez le même pilote Chrome que votre version Chrome. L'emplacement de chromedriver.exe peut être n'importe où, mais je le mets au même endroit que Python pour une compréhension facile.
\Users\[Nom d'utilisateur]\AppData\Local\Programs\Python\Python38\chromedriver.exe
La variable d'environnement PATH a également été définie ci-dessus.
Connectez-vous à l'avance depuis Chrome à l'adresse https://p.eagate.573.jp/game/2dx/27/ranking/weekly.html, Gardons Chrome fermé. Réécrivez la source ci-dessous et exécutez!
sample3.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
options.add_argument('--user-data-dir=C:\\Users\\[Nom d'utilisateur]\\AppData\\Local\\Google\\Chrome\\User Data')
driver = webdriver.Chrome(options=options)
driver.get('https://p.eagate.573.jp/game/2dx/27/ranking/weekly.html')
driver.save_screenshot('test3.png')
driver.quit()
Je l'ai eu en toute sécurité!
La partie que vous voulez réellement est la partie de classement, alors faites des essais pour voir si vous pouvez atteindre la partie de classement. Essayez de cliquer et d'ajuster la position de la page pour afficher la partie souhaitée.
sample4.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
options.add_argument('--user-data-dir=C:\\Users\\[Nom d'utilisateur]\\AppData\\Local\\Google\\Chrome\\User Data')
driver = webdriver.Chrome(options=options)
driver.get('https://p.eagate.573.jp/game/2dx/27/ranking/weekly.html')
driver.find_element_by_xpath("/html/body/div/div[1]/div/div/div[2]/div/div[2]/form/div[2]/ul[1]/li[3]/input").click()
time.sleep(3)
driver.execute_script("window.scrollTo(0, 800)")
time.sleep(3)
driver.save_screenshot('sample.png')
driver.quit()
Ça a l'air bien!
Recommended Posts