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.
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()
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.
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.
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