这里的网站会根据下拉过滤器列出一些数据,所以我试图通过传递静态下拉值来获取这些数据,但我认为由于查看状态我无法获取这些数据。
任何人都知道如何获取使用viewstate的asp.net网站数据?
我收到以下错误
viewstate MAC验证失败。如果此应用程序由Web场或群集托管,请确保< machineKey> configuration指定相同的validationKey和验证算法。无法在群集中使用AutoGenerate。
Python脚本
import requests
from bs4 import BeautifulSoup
def get_viewstate():
url = "http://xlnindia.gov.in/frm_G_Cold_S_Query.aspx?ST=GJ"
req = requests.get(url)
data = req.text
bs = BeautifulSoup(data)
return bs.find("input", {"id": "__VIEWSTATE"}).attrs['value']
url = "http://xlnindia.gov.in/frm_G_Cold_S_Query.aspx?ST=GJ"
data = {"__VIEWSTATE": get_viewstate(),"ST":'GJ', "ddldistrict":'AMR', "ddltaluka":'' ,"btnSearch":'Search'}
req = requests.post(url, data)
bs = BeautifulSoup(req.text)
print(bs.prettify())
答案 0 :(得分:1)
我不认为您可以使用requests
执行此操作,但您可以使用selenium
轻松完成此操作。
安装硒 - pip install selenium
或pip3 install selenium
。
然后从您的计算机的this link下载最新的Chromedriver
,并将driver
复制到您的工作目录。
您可以阅读selenium
文档here。
import time
from selenium import webdriver
url = "http://xlnindia.gov.in/frm_G_Cold_S_Query.aspx?ST=GJ"
browser = webdriver.Chrome()
browser.get(url)
#change this if you want to change the state from Gujrat to something else
#or you can change the state simply by changing the "?ST=GJ" part of the URL
#state = browser.find_element_by_id("ddlState")
#state.send_keys("BR")
district = browser.find_element_by_id("ddldistrict")
district.send_keys("AMR")
#Skip this if you want to include all categories into the result
category = browser.find_element_by_id("ddlCategory")
category.send_keys("R")
button = browser.find_element_by_id("btnSearch")
button.click()
time.sleep(10)
browser.save_screenshot(browser.title + ".JPEG")
html = browser.page_source
print(html)
browser.close()
browser.quit()
注意
如果您想使用selenium
的无头浏览器,请使用PhantomJS
。要了解如何使用PhantomJS
阅读this。