I'm trying to scrape data from website that uses anti forgery token what i tried to do is sending a get request then finding the key and use it to send a post request i was able to successfully scrape the key but the post request returns error page instead of the data page here is the code i used
note : using the key i scraped to send the request using browser console works fine
import requests
SeatingNo = '330814'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.70'
}
res = requests.get("https://g12.emis.gov.eg/", headers=headers)
soup = BeautifulSoup(res.text, "html.parser")
__RequestVerificationToken = soup.find(type="hidden")['value']
print(__RequestVerificationToken)
data = {'SeatingNo': SeatingNo, '__RequestVerificationToken': __RequestVerificationToken}
res = requests.post("https://g12.emis.gov.eg/", data=data, headers=headers)
soup = BeautifulSoup(res.text, "html.parser")
print(soup)
i was able to solve it using cloudscrapper
import cloudscraper
scraper = cloudscraper.create_scraper()
SeatingNo = '330814'
res = scraper.get("https://g12.emis.gov.eg/")
soup = BeautifulSoup(res.text, "html.parser")
__RequestVerificationToken = soup.find(type="hidden")['value']
print(__RequestVerificationToken)
data = {'SeatingNo': SeatingNo, '__RequestVerificationToken': __RequestVerificationToken}
res = scraper.post("https://g12.emis.gov.eg/", data=data)
soup = BeautifulSoup(res.text, "html.parser")
print(soup)