[PYTHON] Lorsque j'explore la webapi qui apparaît pendant le rendu, elle a été lue avec CORS

Le début des choses

Si vous exécutiez un programme qui explore une page écrite à l'aide de python3 Un jour, j'ai eu une erreur comme celle-ci.

Access to XMLHttpRequest at 'https://target' from origin 'https://xxxxxxxxx' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

La mise en œuvre à ce moment-là est la suivante.

import requests
res = requests.get("https://target") #URL webapi

La page qui a été la cible de l'exploration est une page qui lit et affiche des données avec bootstrap, etc. J'ai été crawlé sur une webapi appelée depuis bootstrap pendant le rendu.

Solution

Rampez en utilisant du fil de sélénium. Le webdriver sélénium ne peut gérer que les pages Web rendues, ce qui donne également accès aux résultats des requêtes lors du rendu. https://pypi.org/project/selenium-wire/

from seleniumwire import webdriver

driver = webdriver.Chrome()
driver.get("https://target") #URL de la page TOP

for request in driver.requests:
    if "xxxxx" in request.url: #Conditions pour restreindre les URL pour lesquelles vous voulez des résultats (URL webapi)
        response_text = request.response.body.decode()

Petite histoire

Qu'est-ce que CROS en premier lieu

J'ai étudié dans cet article. https://qiita.com/att55/items/2154a8aad8bf1409db2b Je vois, c'est vraiment nécessaire. Parce qu'il y a des gens qui font des choses comme eux.

Est-il possible de traiter CROS avec python? → Il semble que cela ne puisse pas être fait facilement

Je n'ai pas fait beaucoup de recherches, mais il semble que cela ne puisse pas être fait facilement. Alors j'ai abandonné. Dans CORS, il semble que la demande de contrôle en amont soit ignorée en premier, puis qu'elle soit en fait GET ou POST. https://developer.mozilla.org/ja/docs/Glossary/Preflight_request

Pour cet article, `les demandes de contrôle en amont seront automatiquement émises par le navigateur selon les besoins. Les développeurs frontaux n'ont généralement pas besoin de faire eux-mêmes de telles demandes. Il dit: Le navigateur le fait pour moi = j'ai renoncé à penser que la façon de voler est cachée. Même si vous faites quelque chose, les articles sortiront en utilisant Fetch API ou XMLHttpRequest, il semble donc que vous ne pouvez l'exécuter qu'avec javascript.

Peut être fait avec NodeJS → Peut-être que cela peut être fait (non vérifié)

Parce que c'est du javascript. Il semble que l'API Fetch puisse être utilisée avec NodeJS. https://www.npmjs.com/package/node-fetch

Recommended Posts

Lorsque j'explore la webapi qui apparaît pendant le rendu, elle a été lue avec CORS
Ce que j'ai fait quand j'étais en colère de le mettre avec l'option enable-shared
Lorsque j'ai essayé d'exécuter Python, j'ai été ignoré dans le Microsoft Store
L'histoire que j'ai traitée parce qu'Apache était en panne à AH00144
[Scikit-learn] J'ai joué avec la courbe ROC
Dans IPython, quand j'ai essayé de voir la valeur, c'était un générateur, donc je l'ai inventé quand j'étais frustré.
Le fichier édité avec vim était en lecture seule, mais je veux le sauvegarder
J'ai vérifié si l'API COTOHA pouvait comprendre Mansai, et c'était raisonnable.
Lorsque j'ai essayé de changer le mot de passe root avec ansible, je ne pouvais pas y accéder.
Une histoire à laquelle j'étais accro après la communication SFTP avec python
J'ai joué avec Floydhub pour le moment
Il est devenu TLE lorsque j'ai confirmé l'opération avec la fonction d'impression dans la compétition pro
Une histoire qui était pratique lorsque j'ai essayé d'utiliser le module d'adresse IP python
J'ai essayé de faire sonner le téléphone lorsqu'il a été publié sur le poste IoT
Quand j'ai essayé de faire une communication socket avec Raspberry Pi, le protocole était différent
Lorsque j'ai vérifié la requête générée par Django, elle a été émise en grand nombre
En voici une, je vais résumer les applications équipées "d'intelligence artificielle" qui m'intéressaient
Mémo de code en difficulté car il n'était pas répertorié sur le site discord.py
Résolution du problème selon lequel l'image n'était pas affichée dans ROMol lors du chargement avec PandasTools.LoadSDF.
Un mémo que j'ai touché au magasin de données avec python
L'histoire de la confusion entre la production japonaise et Django
Quand j'ai essayé le concours AtCoder pour débutants, c'était un résultat terrible, alors je regarde en arrière
Quand j'ai calculé les mots similaires de prudent + courageux avec word2vec, cela me semblait étonnamment raisonnable
[VLC] Comment gérer le problème de ne pas être au premier plan pendant la lecture