technique:python:selenium

Ceci est une ancienne révision du document !


Selenium

pour tests d'interface web : https://www.selenium.dev/downloads/

Ressources :

Pré-recquis

  1. un navigateur compatible : Firefox, Chrome, Chromium, IE
  2. une API Webdriver (binaire) pour le navigateur :
  3. la lib pyhon selenium (via pip ou virtualenv)
  4. Un script (python) qui appelle la lib et le binaire

Placer le binaire dans le path ou spécifier le chemin dans le script

Exemple :

import time
 
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
 
service = Service('/path/to/chromedriver')
service.start()
driver = webdriver.Remote(service.service_url)
driver.get('http://www.google.com/');
time.sleep(5) # Let the user actually see something!
driver.quit()

Autre exemple :

#!/usr/bin/env python3
 
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait, Select
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
import os, time
 
download_dir = os.environ['HOME']
 
def wait_for_id(driver, id):
    try:
        r = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, id)))
    except TimeoutException:
        print("timed out !")
        exit
 
    return r
 
profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.folderList', 2)
profile.set_preference('browser.download.manager.showWhenStarting', False)
profile.set_preference('browser.download.dir', download_dir)
profile.set_preference('browser.helperApps.alwaysAsk.force', False)
profile.set_preference('browser.helperApps.neverAsk.openFile', 'text/csv')
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv')
driver = webdriver.Firefox(profile)
driver.get("https://mon-url.com")
 
driver.find_element_by_id("ctl00_mainContent_Login1_UserName").send_keys("monlogin")
driver.find_element_by_id("ctl00_mainContent_Login1_Password").send_keys("monmotdepasse")
driver.find_element_by_id("ctl00_mainContent_Login1_LoginButton").click()
home_page = wait_for_id(driver, "ctl00_ctl00_menubarPlaceHolder_ASPxMenu1")
 
stats_link = home_page.find_element_by_css_selector("#ctl00_ctl00_menubarPlaceHolder_ASPxMenu1_DXI5_T a").click()
candidates_link = wait_for_id(driver, "ctl00_ctl00_mainContent_mainContent_WucCatalogueReporting1_TvMenut2")
driver.find_element_by_id("ctl00_ctl00_mainContent_mainContent_WucCatalogueReporting1_TvMenut2").click()
format_link = wait_for_id(driver, "ctl00_ctl00_mainContent_mainContent_WucCatalogueReporting1_RvMain_ctl01_ctl05_ctl00").click()
 
format_selector = Select(driver.find_element_by_id("ctl00_ctl00_mainContent_mainContent_WucCatalogueReporting1_RvMain_ctl01_ctl05_ctl00"))
format_selector.select_by_value("CSV")
driver.find_element_by_id("ctl00_ctl00_mainContent_mainContent_WucCatalogueReporting1_RvMain_ctl01_ctl05_ctl01").click()
 
before = dict([(f, None) for f in os.listdir(download_dir)])
while 1:
  time.sleep(10)
  after = dict([(f, None) for f in os.listdir(download_dir)])
  added = [f for f in after if not f in before]
  if "OfCandidat.csv" in added:
      break
  before = after
 
driver.quit()
  • technique/python/selenium.1626384810.txt.gz
  • Dernière modification : 2021/07/15 23:33
  • de francoisa