Это мой первый пост в Stackoverflow, поэтому, пожалуйста, будьте добры:)
Я пытаюсь отправить форму с использованием Python и библиотеки запросов на сайт asp.net, но не могу создать ожидаемыйответ. Форма включает в себя return ConfirmYesNo(this)
как часть события onclick
, которое я не смог передать постбеку.
Я успешно вошел на сайт с помощью запросов и могу перейти на соответствующую страницу. который содержит форму, которую я хотел бы отправить. Используя инструменты разработчика в IE (кажется, никакой другой браузер не будет работать с этим сайтом!) Я смог определить детали заголовка, которые передаются, когда запрос фактически сделан.
Однако может показаться, что без возможности включения «истинного» результата от события onclick
я не получаю ожидаемый ответ от сервера.
Существует множестводругие сообщения, касающиеся отправки данных формы на сайты asp.net, но мне не удалось попробовать различные методы, которые я рассмотрел. Я полагаю, что частью проблемы является устаревшее «всплывающее окно», которое используется при нажатии кнопки «Отправить», я не могу дублировать его в других браузерах.
import requests
from bs4 import BeautifulSoup
consdb_url = "http://192.168.253.85/ConsolidatedProcess.aspx"
# this is after logging in
consdb_content = session.get(consdb_url)
# print(consdb_content.text)
soup = BeautifulSoup(consdb_content.content, 'html.parser')
payload = {
'__EVENTARGUMENT': '',
'__EVENTTARGET': 'ctl00%24ContentPlaceHolder1%24lbtnSubmit',
'__EVENTVALIDATION': soup.find('input', attrs={'name': '__EVENTVALIDATION'})['value'],
'__LASTFOCUS': '',
'__VIEWSTATE': soup.find('input', attrs={'name': '__VIEWSTATE'})['value'],
'__VIEWSTATEENCRYPTED': '',
'__VIEWSTATEGENERATOR': soup.find('input', attrs={'name': '__VIEWSTATEGENERATOR'})['value'],
'ctl00$ContentPlaceHolder1$ddlFunctionType': '1',
'ctl00$ContentPlaceHolder1$ddlFunctionTypeSearchSection': '0',
'ctl00$ContentPlaceHolder1$ddlStatus': '0',
'ctl00$ContentPlaceHolder1$txtEndDate':
soup.find('input', attrs={'name': 'ctl00$ContentPlaceHolder1$txtEndDate'})['value'],
'ctl00$ContentPlaceHolder1$txtStartDate':
soup.find('input', attrs={'name': 'ctl00$ContentPlaceHolder1$txtStartDate'})['value'],
'ctl00$ScriptManager1': 'ctl00$ContentPlaceHolder1$lbtnSubmit'
}
print(payload)
post = session.post(consdb_url, data=payload)
JS:
function ConfirmYesNo(x)
{
if (x.disabled == false)
{
var yesnoStatus;
yesnoStatus= confirm("Are you Sure?");
return yesnoStatus;
}
else
{
return false;
}
}
Разметка HTML:
<a id="ctl00_ContentPlaceHolder1_lbtnSubmit" style="color: white; font-size: 8pt; font-weight: bold; text-decoration: none;" onclick="return ConfirmYesNo(this);" href='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ContentPlaceHolder1$lbtnSubmit", "", true, "", "", false, true))'>Submit </a>
Когда форма отправляется через браузер, я ожидаю увидеть статус, заполненный для определенного элемента:
<span id="ctl00_ContentPlaceHolder1_grdVwFunctionTypeTrans_ctl03_lblSuccess">Successful</span>
Вместо этого запрос просто возвращает ту же форму, как будто ничего не было подано.