Skip to content

Commit

Permalink
Test selenium en intégration continue (#331)
Browse files Browse the repository at this point in the history
* 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>
  • Loading branch information
3 people committed Dec 4, 2022
1 parent 342b59b commit 938f9bc
Showing 1 changed file with 34 additions and 30 deletions.
64 changes: 34 additions & 30 deletions content/course/manipulation/04a_webscraping_TP/index.qmd
Expand Up @@ -1086,7 +1086,7 @@ Si vous êtes sur le SSP-Cloud, vous pouvez
exécuter les commandes suivantes:

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

```{python}
#| eval: false
#| output: false
!pip install selenium
```

Expand All @@ -1115,7 +1115,7 @@ cellule de `Notebook`:


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

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

```{python}
#| eval: false
#| output: false
import time
from selenium import webdriver
Expand All @@ -1137,55 +1138,58 @@ chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
#chrome_options.add_argument('--verbose')
#chrome_options.add_argument('--disable-dev-shm-usage')
```

```{python}
#| include: false
# specific pour usage dans docker container
chrome_options.add_argument('--disable-dev-shm-usage')
```

Puis on lance le navigateur:

```{python}
browser = webdriver.Chrome(executable_path=path_to_web_driver,
options=chrome_options)
```

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

```{python}
#| eval: false
browser.get('https://www.bing.com/news')
# on cherche l'endroit où on peut remplir un formulaire
# en utilisant les outils du navigateur > inspecter les éléments de la page
# on voit que la barre de recherche est un élement du code appelé 'q' comme query
# on lui demande de chercher cet élément
search = browser.find_element("name", "q")
print(search)
print([search.text, search.tag_name, search.id])
# on envoie à cet endroit le mot qu'on aurait tapé dans la barre de recherche
search.send_keys("Trump")
search_button = browser.find_element("xpath", "//input[@id='sb_form_go']")
#search_button = browser.find_element("id", 'search_button_homepage')
search_button = browser.find_element("xpath", "//input[@id='sb_form_go']")
search_button.click()
# on appuie sur le bouton "Entrée" Return en anglais
#search.send_keys(Keys.RETURN)
```

`selenium` permet de capturer l'image qu'on verrait dans le navigateur
avec `get_screenshot_as_png`. Cela peut être utile pour vérifier qu'on
a fait la bonne action:

```{python}
#| eval: false
#| output: false
png = browser.get_screenshot_as_png()
```

```{python}
#| eval: false
from IPython.display import Image
Image(png, width='500')
```

On extrait les résultats.
Enfin, on peut extraire les résultats:

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

Enfin, pour mettre fin à notre session, on demande
à `Python` de quitter le navigateur

```{python}
#| eval: false
# on a une pause de 10 secondes pour aller voir ce qui se passe sur la page internet
# on demande de quitter le navigateur quand tout est fini
browser.quit()
```

On a obtenu les résultats suivants:


```{python}
#| eval: false
print(results)
```

Expand Down Expand Up @@ -1265,7 +1269,7 @@ browser.quit()

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.
La solution pour cet exercice a été proposée
par [@tttienthinh](https://github.com/tttienthinh)
par [Tien-Thinh](https://github.com/tttienthinh)
et [Antoine Palazzolo](https://github.com/antoine-palazz).

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

0 comments on commit 938f9bc

Please sign in to comment.