Отправить данные формы aspx с запросами Python - PullRequest
0 голосов
/ 16 октября 2019

Это мой первый пост в 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&nbsp;&nbsp;</a>

Когда форма отправляется через браузер, я ожидаю увидеть статус, заполненный для определенного элемента:

<span id="ctl00_ContentPlaceHolder1_grdVwFunctionTypeTrans_ctl03_lblSuccess">Successful</span>

Вместо этого запрос просто возвращает ту же форму, как будто ничего не было подано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...