Skip to content

Commit 938f9bc

Browse files
linogalianagithub-actions[bot]root
authored
Test selenium en intégration continue (#331)
* ci * Automated changes * Automated changes * more image * Automated changes * eval * Automated changes * selenium * Automated changes * Automated changes * disable * Automated changes * Automated changes Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: root <root@vscode-python-592802-0.vscode-python-592802.projet-cartiflette.svc.cluster.local>
1 parent 342b59b commit 938f9bc

File tree

1 file changed

+34
-30
lines changed
  • content/course/manipulation/04a_webscraping_TP

1 file changed

+34
-30
lines changed

content/course/manipulation/04a_webscraping_TP/index.qmd

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,7 +1086,7 @@ Si vous êtes sur le SSP-Cloud, vous pouvez
10861086
exécuter les commandes suivantes:
10871087

10881088
```{python}
1089-
#| eval: false
1089+
#| output: false
10901090
!wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -O /tmp/chrome.deb
10911091
!sudo apt-get update
10921092
!sudo -E apt-get install -y /tmp/chrome.deb
@@ -1104,7 +1104,7 @@ exemple, depuis une
11041104
cellule de `Notebook`:
11051105

11061106
```{python}
1107-
#| eval: false
1107+
#| output: false
11081108
!pip install selenium
11091109
```
11101110

@@ -1115,7 +1115,7 @@ cellule de `Notebook`:
11151115

11161116

11171117
```{python}
1118-
#| eval: false
1118+
#| output: false
11191119
import sys
11201120
sys.path.insert(0,'/usr/lib/chromium-browser/chromedriver')
11211121
import selenium
@@ -1124,10 +1124,11 @@ path_to_web_driver = "chromedriver"
11241124

11251125
En premier lieu, il convient d'initialiser le comportement
11261126
de `Selenium` en répliquant les paramètres
1127-
du navigateur:
1127+
du navigateur. Pour cela, on va d'abord initialiser
1128+
notre navigateur avec quelques options:
11281129

11291130
```{python}
1130-
#| eval: false
1131+
#| output: false
11311132
import time
11321133
11331134
from selenium import webdriver
@@ -1137,55 +1138,58 @@ chrome_options = webdriver.ChromeOptions()
11371138
chrome_options.add_argument('--headless')
11381139
chrome_options.add_argument('--no-sandbox')
11391140
#chrome_options.add_argument('--verbose')
1140-
#chrome_options.add_argument('--disable-dev-shm-usage')
1141+
```
1142+
1143+
```{python}
1144+
#| include: false
1145+
# specific pour usage dans docker container
1146+
chrome_options.add_argument('--disable-dev-shm-usage')
1147+
```
1148+
1149+
Puis on lance le navigateur:
11411150

1151+
```{python}
11421152
browser = webdriver.Chrome(executable_path=path_to_web_driver,
11431153
options=chrome_options)
11441154
```
11451155

11461156
On va sur le site de `Bing Actualités`, et on lui indique le mot clé que nous souhaitons chercher.
1157+
En l'occurrence, on s'intéresse aux actualités de Donald Trump.
1158+
Après avoir inspecté la page depuis les outils de développement du navigateur,
1159+
on voit que la barre de recherche est un élement du code appelé `q` (comme _query_).
1160+
On va ainsi demander à `selenium` de chercher cet élément:
11471161

11481162
```{python}
1149-
#| eval: false
11501163
browser.get('https://www.bing.com/news')
11511164
1152-
# on cherche l'endroit où on peut remplir un formulaire
1153-
# en utilisant les outils du navigateur > inspecter les éléments de la page
1154-
# on voit que la barre de recherche est un élement du code appelé 'q' comme query
1155-
# on lui demande de chercher cet élément
1156-
11571165
search = browser.find_element("name", "q")
11581166
print(search)
11591167
print([search.text, search.tag_name, search.id])
11601168
11611169
# on envoie à cet endroit le mot qu'on aurait tapé dans la barre de recherche
11621170
search.send_keys("Trump")
11631171
1164-
search_button = browser.find_element("xpath", "//input[@id='sb_form_go']")
1165-
1166-
#search_button = browser.find_element("id", 'search_button_homepage')
1167-
1172+
search_button = browser.find_element("xpath", "//input[@id='sb_form_go']")
11681173
search_button.click()
1169-
1170-
# on appuie sur le bouton "Entrée" Return en anglais
1171-
#search.send_keys(Keys.RETURN)
11721174
```
11731175

1176+
`selenium` permet de capturer l'image qu'on verrait dans le navigateur
1177+
avec `get_screenshot_as_png`. Cela peut être utile pour vérifier qu'on
1178+
a fait la bonne action:
1179+
11741180
```{python}
1175-
#| eval: false
1181+
#| output: false
11761182
png = browser.get_screenshot_as_png()
11771183
```
11781184

11791185
```{python}
1180-
#| eval: false
11811186
from IPython.display import Image
11821187
Image(png, width='500')
11831188
```
11841189

1185-
On extrait les résultats.
1190+
Enfin, on peut extraire les résultats:
11861191

11871192
```{python}
1188-
#| eval: false
11891193
from selenium.common.exceptions import StaleElementReferenceException
11901194
links = browser.find_elements("xpath", "//div/a[@class='title'][@href]")
11911195
@@ -1197,19 +1201,19 @@ for link in links:
11971201
print("Issue with '{0}' and '{1}'".format(url, link))
11981202
print("It might be due to slow javascript which produces the HTML page.")
11991203
results.append(url)
1200-
1201-
len(results)
12021204
```
12031205

1206+
Enfin, pour mettre fin à notre session, on demande
1207+
à `Python` de quitter le navigateur
1208+
12041209
```{python}
1205-
#| eval: false
1206-
# on a une pause de 10 secondes pour aller voir ce qui se passe sur la page internet
1207-
# on demande de quitter le navigateur quand tout est fini
12081210
browser.quit()
12091211
```
12101212

1213+
On a obtenu les résultats suivants:
1214+
1215+
12111216
```{python}
1212-
#| eval: false
12131217
print(results)
12141218
```
12151219

@@ -1265,7 +1269,7 @@ browser.quit()
12651269

12661270
Pour cet exercice, on propose de scraper la liste des ministres français depuis le [site du gouvernement](https://www.gouvernement.fr/composition-du-gouvernement). L'objectif sera, _in fine_ de faire un graphique qui représente la distribution de leurs âges.
12671271
La solution pour cet exercice a été proposée
1268-
par [@tttienthinh](https://github.com/tttienthinh)
1272+
par [Tien-Thinh](https://github.com/tttienthinh)
12691273
et [Antoine Palazzolo](https://github.com/antoine-palazz).
12701274

12711275
Pour être en mesure de faire cet exercice, il est

0 commit comments

Comments
 (0)