Я играю со 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 для возраста и передача их при каждом запросе, поэтому, возможно, проверка возраста вообще игнорируется?
Спасибо!