[PYTHON] astuce sélénium (proxy / sans tête)

selenium-logo-150x150.png

Contexte

Un mémo des résultats obtenus lors de l'utilisation du sélénium

↓ Méthode d'introduction ■ Installation de Selenium WebDriver - Essai

Au fait, avec python, il est possible de démarrer à une vitesse explosive comme celle-ci

$ pip install selenium

#Ou
$ conda install selenium

base

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()

Options de démarrage

Peut être démarré en mode sans tête en ajoutant --headless

options.add_argument('--headless')
driver = webdriver.Chrome(options=options)

Fonctionne en dehors du bac à sable en ajoutant --no-sandbox

options.add_argument('--no-sandbox')
driver = webdriver.Chrome(options=options)

Paramètres du proxy

option.add_argument('--proxy-server=http://%s' % PROXY)
option.add_argument('--proxy-auth=%s' % PROXY_AUTH)
driver = webdriver.Chrome(options=options)

Configurer pour ouvrir dans une nouvelle fenêtre au lieu d'ouvrir dans un nouvel onglet d'une fenêtre existante

options.add_argument('--new-window')
driver = webdriver.Chrome(options=options)

Exécuter js déclenché avec l'attribut onclick

Il semble y avoir un moment où le système de boutons est automatisé avec du sélénium. Si vous souhaitez exécuter js, vous pouvez l'exécuter directement comme indiqué ci-dessous sans cliquer sur un bouton.

browser.execute_script('javascript:hogehoge();')

Changer d'iframe

iframe = driver.find_element_by_id('wpnt-notes-iframe2')
#Passer au cadre en ligne acquis
driver.switch_to.frame(iframe)

Différence entre arrêter et quitter

「driver.close()」 Seul l'onglet actif est fermé.

「driver.quit()」 Fermez tous les onglets et quittez le navigateur.

docker-selenium

Lorsque le sélénium est introduit à partir d'un état propre, une procédure peu gênante est nécessaire. Je me suis demandé s'il pouvait être utilisé rapidement comme un docker et je l'ai trouvé.

Je l'ai vu en utilisant docker-sélénium

Il semble que VNC soit utilisé pour exécuter le chrome à l'intérieur et l'exécuter là-bas. Il semble être très pratique de partager des fichiers facilement si vous avez des connaissances de docker.

En préparant un conteneur pour VNC et un conteneur pour le test du navigateur, vous pouvez rapidement préparer un environnement de test distinct de l'environnement de développement comme celui-ci.

version: '3.7'

services:
  chrome-server:
    build:
      context: ./chrome
      dockerfile: Dockerfile
    container_name: 'chrome-server'
    hostname: 'chrome-server'
    ports:
      - 9000:5900
      - 4444:4444
    environment:
      - 'TZ=Asia/Tokyo'
      - 'HUB_PORT_4444_TCP_ADDR=hub'
      - 'HUB_PORT_4444_TCP_PORT=4444'
    volumes:
      - ./chrome/downloads:/root/Downloads
  py-server:
    build:
      context: ./py-server
      dockerfile: Dockerfile
     container_name: 'py-server'
     hostname: 'py-server'
     environment:
       - 'TZ=Asia/Tokyo'
     tty: true
     depends_on:
       - chrome-server
     volumes:
       - ./py-server/src:/app/src
       - ./py-server/images:/app/images
     env_file:
       - app.env

Il est très pratique que l'environnement de test du navigateur soit complété par docker.

référence

options de démarrage de chrome[Python] Manipuler le contenu d'iframe avec SeleniumMaîtrisons Chrome DevTools! Bases du débogage avec les outils de développement de navigateur essentiels pour le développement Web

Recommended Posts

astuce sélénium (proxy / sans tête)
sélénium
J'ai essayé d'utiliser du sélénium avec du chrome sans tête
J'ai essayé d'utiliser Headless Chrome de Selenium