Заставьте Scrapy отправлять POST-данные из функции Javascript - PullRequest
0 голосов
/ 02 января 2019

Я играю со Scrapy и играю с этим учебником . Все выглядит хорошо, но я заметил, что Steam изменил проверку возраста, поэтому в DOM больше нет формы. Поэтому предлагаемое решение не будет работать:

form = response.css('#agegate_box form')

action = form.xpath('@action').extract_first()

name = form.xpath('input/@name').extract_first()

value = form.xpath('input/@value').extract_first()

formdata = {

        name: value,

        'ageDay': '1',

        'ageMonth': '1',

        'ageYear': '1955'

}

yield FormRequest(

        url=action,

        method='POST',

        formdata=formdata,

        callback=self.parse_product

    )

Проверка примера игра , которая вызывает проверку возраста; Я заметил, что кнопка View Page больше не является формой:

<a class="btnv6_blue_hoverfade btn_medium" href="#" onclick="ViewProductPage()"><span>View Page</span></a>

И вызываемая функция в конце концов вызовет эту:

function CheckAgeGateSubmit( callbackFunc )
    {
                    if ( $J('#ageYear').val() == 2019 )
        {
            ShowAlertDialog( '', 'Please enter a valid date' );
            return false;
        }

        $J.post(
            'https://store.steampowered.com/agecheckset/' + "app" + '/9200/',
            {
                sessionid: g_sessionID,
                ageDay: $J('#ageDay').val(),
                ageMonth: $J('#ageMonth').val(),
                ageYear: $J('#ageYear').val()
            }
        ).done( function( response ) {
            switch ( response.success )
            {
                case 1:
                    callbackFunc();
                    break;
                case 24:
                    top.location.reload();
                    break;
                case 15:
                case 2:
                    ShowAlertDialog( 'Error', 'There was a problem verifying your age.  Please try again later.' );
                    break;
            }
        } );

}

Так что, в основном, это создание POST с некоторыми данными ... что будет лучшим способом сделать это в Scrapy, так как это больше не форма? Я просто думаю об игнорировании кода, где получена форма, и просто отправляю запрос с объектом FormRequest ... но так ли это? Альтернативой также может быть установка файлов cookie для возраста и передача их при каждом запросе, поэтому, возможно, проверка возраста вообще игнорируется?

Спасибо!

1 Ответ

0 голосов
/ 03 января 2019

Вероятно, вам следует просто установить соответствующий файл cookie, и вас пропустят!

Если вы посмотрите на то, что ваш браузер имеет при входе на страницу:

enter image description here

и повторить это в скрапе:

cookies = {
    'wants_mature_content':'1',
    'birthtime':'189302401',
    'lastagecheckage': '1-January-1976',
}
url = 'https://store.steampowered.com/app/9200/RAGE/'
Request(url, cookies)

lastagecheckage, вероятно, должно быть достаточно само по себе, но я не проверял это.

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