Comment faire des requêtes POST en utilisant Playwright ?

Faire des requêtes POST est une technique cruciale pour l’automatisation du Web et le Web Scraping. Voyons comment réaliser cette fonctionnalité avec le framework Playwright.

L’automatisation du Web est un moyen technique par lequel les actions effectuées sur Internet, via les navigateurs Web, sont réalisées de manière automatisée. Cela inclut la lecture et la réponse, le téléchargement, le remplissage de formulaires, etc.

Playwright est une bibliothèque NodeJS & Python permettant d’automatiser Chromium, Edge, Firefox et WebKit avec une seule API.

Pourquoi avons-nous besoin de requête POST ?

La requête POST est l’un des nombreux types de requête HTTP disponibles. Par conception, cette méthode est utilisée pour envoyer des données à un serveur web pour traitement.

L’utilisation des requêtes POST est l’un des principaux moyens d’envoyer des données de formulaire lors de la connexion ou de l’enregistrement d’informations sur le serveur Web. C’est également l’un des moyens d’envoyer n’importe quelle donnée a un serveur web. En effet, de nombreux sites utilisent les requêtes POST pour la communication client-serveur, ce qui nécessite la possibilité d’envoyer des requêtes POST pendant l’automatisation / le web scraping.

API Playwright APIRequestContext

L’idée de notre approche est assez simple. Nous devons changer le type de demande de requête lors de l’ouverture de la page, afin de pouvoir envoyer des données POST en même temps que l’ouverture d’une page. Pour ce faire, nous utilisons la classe Playwright APIRequestContext avec la méthode fetch().

Cette méthode permettant

  • L’envoie d’une requête HTTP(S).
  • Le renvoie de la réponse.
  • Le remplissage des cookies de la requête à partir du contexte.
  • La mise à jour des cookies du contexte à partir de la réponse.
  • De passer directement les objets au format json

Il est à noter que cette méthode suivra automatiquement les redirections.

Dans notre exemple ci-dessous, les arguments de cette méthode étant

  • url_or_request : URL ou requête cible ou les données seront postées.
  • headers : Permet de définir les en-têtes (headers) de la requête HTTP(S).
  • method : Permet de définir la méthode de la requête (par exemple, PUT ou POST). Si elle n’est pas spécifiée, la méthode GET est utilisée.
  • data : Permet de définir les données communiquées dans la requête. Si le paramètre data est un objet, il sera sérialisé en chaîne json et l’en-tête content-type sera défini à application/json s’il n’est pas explicitement défini. Sinon, l’en-tête content-type sera fixé à application/octet-stream s’il n’est pas explicitement défini.
import asyncio
from playwright.async_api import async_playwright, Playwright

async def run_post(playwright: Playwright, url: str, data: dict):
    # https://playwright.dev/python/docs/browsers#google-chrome--microsoft-edge
    browser = await playwright.firefox.launch()
    # https://playwright.dev/python/docs/api/class-apirequest#api-request-new-context
    context = await browser.new_context()
    api_request_context = context.request
    # https://playwright.dev/python/docs/api/class-apirequestcontext#api-request-context-fetch
    response = await api_request_context.fetch(
        url_or_request=url,
        headers={"Accept": "application/json"},
        method='post',
        data=data
    )
    assert response.ok
    response_dict = await response.json()
    assert response_dict['json']['hello'] == data['hello']

async def main():
    async with async_playwright() as playwright:
        await run_post(playwright, 'https://httpbin.org/post', {'hello': 'I like Playwright'})

asyncio.run(main())

L’utilisation de cette fonction est simple avec la possibilité d’utiliser cette API avec n’importe quelle méthode HTTP(S) disponible et des en-têtes personnalisés.

Conclusion

Avec cette Api de Playwright, il est possible d’envoyer tout type de requête permettant d’étendre les capacités de l’automatisation Web / Web Scraping et d’améliorer les performances en simplifiant le remplissage de formulaires.

Laisser un commentaire