-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathselenium-tuto.py
More file actions
111 lines (100 loc) · 4.53 KB
/
selenium-tuto.py
File metadata and controls
111 lines (100 loc) · 4.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/usr/bin/python3.11
# -*- coding: utf-8 -*-
""" tuto pour utiliser selenium avec python
sources:
https://datascientest.com/selenium-python-web-scraping
https://pypi.org/project/selenium/
https://www.selenium.dev/selenium/docs/api/py/
https://www.selenium.dev/selenium/docs/api/py/webdriver_remote/selenium.webdriver.remote.webelement.html
"""
from selenium import webdriver # contrôle le navigateur
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By # accède aux élements de la page web
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager # utiliser le navigateur chrome
import time
myurl = 'http://www.my-url.com'
# lancer le navigateur, ici chrome
service = Service()
options = webdriver.ChromeOptions()
options.add_argument ('--enable-unsafe-swiftshader')
options.add_argument ('--ignore-certificate-errors')
options.add_argument ('--ignore-ssl-errors')
options.add_argument ('--log-level=3')
# télécharger les fichiers dans un dossier spécifique
# options.add_argument ('download.default_directory=' + dossierTelechargements)
prefs ={ 'download.default_directory': dossierTelechargements, 'profile.default_content_setting_values.clipboard': 1 }
options.add_experimental_option ('prefs', prefs)
driver = webdriver.Chrome (service=service, options=options)
# charger ma page dans le navigateur
driver.get (myurl)
# remplir et valider le formulaire de login. le get me redirige automatiquement vers une page de login
fieldName = driver.find_element (By.NAME, 'login-name')
fieldName.send_keys ('deborah.powers')
fieldPwd = driver.find_element (By.NAME, 'login-pwd')
fieldPwd.send_keys ('noisette416')
buttonSend = driver.find_element (By.NAME, 'login-button')
buttonSend.submit() # input type='button', type='submit'
buttonSend.click() # button, anchor
# après la validation, rediriger vers ma page. elle est affichée
driver.get (myurl)
# laisser une seconde pour que ma page se charge
time.sleep (1)
# reffuser les cookies
try:
cookiesReffuser = driver.find_element (By.ID, 'cookies-reffuser')
cookiesReffuser.click() # méthode 1
driver.execute_script ('arguments[0].click();', cookiesReffuser) # méthode 2
time.sleep (1)
except exceptions.NoSuchElementException: print ('les cookies ont déjà été validés')
# recupérer des éléments
gotById = driver.find_element (By.ID, 'valeur')
gotByClass = driver.find_element (By.CLASS_NAME, 'valeur')
gotByTag = driver.find_element (By.TAG_NAME, 'valeur')
gotByInputName = driver.find_element (By.NAME, 'valeur')
gotByXpath = driver.find_element (By.XPATH, '//p[@class="valeur"]/strong[1]')
gotFromElement = gotById.find_element (By.CLASS_NAME, 'valeur')
gotList = driver.find_elements (By.CLASS_NAME, 'valeur')
directChildren = gotById.find_elements (By.XPATH, './*')
allDescents = gotById.find_elements (By.XPATH, './/*')
someDescents = gotById.find_elements (By.XPATH, './/img[".jpg"=substring(@src, string-length(@src) -4)]')
# récupérer les propriétés des éléments
innerText = gotById.text
domAttribute = anchorElement.get_dom_attribute ('href')
customAttribute = gotById.get_attribute ('perso')
# scroller
def scroll (value):
rangeMicroScroll =( 0,1,2,3,4,5,6,7,8,9 ) # nombre de micro-scroll à effectuer
for i in rangeMicroScroll:
driver.execute_script ('window.scrollBy (0, %d)' % value)
time.sleep (0.1) # Temps entre chaque scroll
scroll (300) # scroll automatique vers le bas
scroll (-200) # scroll automatique vers le haut
# revenir en arrière
driver.get (myurl)
content = driver.find_element (By.CLASS_NAME, 'toto')
# actions
# l'élément content est perdu
driver.get (myurlBis)
# actions
# la page est rechargée. récupérer l'élément content
driver.back()
driver.execute_script ('window.history.go(-1)')
content = driver.find_element (By.CLASS_NAME, 'toto')
""" options du navigateur chrome qui ne me servent pas
options.add_argument ('--enable-unsafe-swiftshader')
options.add_argument ('--log-level=3')
options.add_argument ('--accept_insecure_certs')
options.add_argument ('--ignore-certificate-errors')
options.add_argument ('--ignore-certificate-errors-spki-list')
options.add_argument ('--ignore-ssl-errors')
options.add_argument ('--disable-gpu')
options.add_argument ('--mute-audio')
options.add_argument ('--disable-infobars')
options.add_argument ('--no-sandbox')
options.add_argument ('--no-zygote')
options.add_argument ('--allow-running-insecure-content')
options.add_argument ('--disable-web-security')
options.add_argument ('--disable-features=VizDisplayCompositor')
options.add_argument ('--disable-breakpad')
"""