Comment puis-je obtenir du HTML à partir d'une page avec cloudection de portection dfl

c# html-agility-pack

Question

J'utilise htmlagility pour obtenir des données de page Web, mais j'ai tout essayé avec la page utilisant la protection www.cloudflare.com pour ddos. La page de redirection n'est pas possible à gérer en htmlagility car ils ne redirigent pas avec meta ni js. Ils vérifient si vous avez déjà été contrôlé avec un cookie que je n'ai pas réussi à simuler avec c #. Lorsque je reçois la page, le code HTML provient de la page d'atterrissage.

Réponse populaire

J'ai aussi rencontré ce problème il y a quelque temps. La vraie solution serait de résoudre le problème que vous posent les sites Web cloudflare (vous devez calculer une réponse correcte à l'aide de javascript, la renvoyer, puis vous recevrez un cookie / votre jeton avec lequel vous pourrez continuer à consulter le site Web). Donc, tout ce que vous obtiendrez normalement est une page comme

nuage de nuages

En fin de compte, je viens d'appeler un script python avec un shell-execute. J'ai utilisé les modules fournis dans cette fourche github . Cela pourrait servir de point de départ pour mettre en œuvre le contournement de la page anti-dDoS de cloudflare en C # aswell.

Pour info, le script python que j'ai écrit pour mon usage personnel vient d'écrire le cookie dans un fichier. J'ai lu cela plus tard encore en utilisant C # et le stocker dans un CookieJar pour continuer à parcourir la page dans C #.

#!/usr/bin/env python
import cfscrape
import sys

scraper = cfscrape.create_scraper() # returns a requests.Session object
fd = open("cookie.txt", "w")
c = cfscrape.get_cookie_string(sys.argv[1])
fd.write(str(c))
fd.close()  
print(c)

EDIT: Pour répéter cela, cela n’a que PEU à faire avec les cookies! Cloudflare vous oblige à résoudre un vrai défi en utilisant des commandes javascript. Ce n'est pas aussi facile que d'accepter un cookie et de l'utiliser ultérieurement. Regardez https://github.com/Anorov/cloudflare-scrape/blob/master/cfscrape/ init .py et les ~ 40 lignes d'émulation javascript pour résoudre le problème.

Edit2: Au lieu d’écrire quelque chose pour contourner la protection, j’ai aussi vu des personnes utiliser un objet de navigateur à part entière (ce n’est pas un navigateur sans interface graphique) pour accéder au site Web et s’abonner à certains événements lorsque la page est chargée. Utilisez la classe WebBrowser pour créer une fenêtre de navigateur infiniment petite et vous abonner aux événements appropriés.

Edit3: Bon, j'ai en fait implémenté la méthode C # pour le faire. Ceci utilise le moteur JavaScript Jint pour .NET, disponible via https://www.nuget.org/packages/Jint

Le code de gestion des cookies est moche, car parfois la classe HttpResponse ne récupère pas les cookies, même si l’en-tête contient une section Set-Cookie .

#!/usr/bin/env python
import cfscrape
import sys

scraper = cfscrape.create_scraper() # returns a requests.Session object
fd = open("cookie.txt", "w")
c = cfscrape.get_cookie_string(sys.argv[1])
fd.write(str(c))
fd.close()  
print(c)

La fonction renverra un client Web contenant les défis résolus et les cookies. Vous pouvez l'utiliser comme suit:

#!/usr/bin/env python
import cfscrape
import sys

scraper = cfscrape.create_scraper() # returns a requests.Session object
fd = open("cookie.txt", "w")
c = cfscrape.get_cookie_string(sys.argv[1])
fd.write(str(c))
fd.close()  
print(c)



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi