Scrapy Select выпадающее меню и doPostBack (aspx) - PullRequest
0 голосов
/ 16 марта 2020

Я сканирую страницу (без входа в систему), чтобы извлечь основную c информацию. Мне нужно перемещаться с одной страницы на другую. Но чтобы go перейти к следующей странице, мне нужно выбрать опцию в меню, которое запускает __doPostBack.

При запуске паука я получил ошибку Crawled (200) (referer: None), что означает форма была отправлена ​​неправильно. Есть идеи? Заранее спасибо

html

	</select>
        &nbsp;
        <select name="ctl00$ctl00$CPContent$CPMain$ucCupRoundsDropdown$ddlMatchRounds" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;ctl00$ctl00$CPContent$CPMain$ucCupRoundsDropdown$ddlMatchRounds\&#39;,\&#39;\&#39;)&#39;, 0)" id="ctl00_ctl00_CPContent_CPMain_ucCupRoundsDropdown_ddlMatchRounds">
		<option value="1">Cup Round 1</option>
		<option value="2">Cup Round 2</option>
		<option selected="selected" value="3">Cup Round 3</option>
		<option value="4">Cup Round 4</option>
		<option value="5">Cup Round 5</option>
		<option value="6">Cup Round 6</option>
		<option value="7">Cup Round 7</option>
		<option value="8">Cup Round 8</option>
		<option value="9">Cup Round 9</option>
		<option value="10">Cup Round 10</option>
		<option value="11">Cup Round 11</option>

	</select>

Код:

class HattrickSpider(CrawlSpider):
name= 'cup'
allow_domain = ['hattrick.org'] 
start_urls = ['https://www.hattrick.org/en/World/Cup/CupMatches.aspx?CupId=18']


def parse(self, response):
    button = response.selector.xpath('//*[@id="ctl00_ctl00_CPContent_CPMain_ucCupRoundsDropdown_ddlMatchRounds"]/option[4]/@value').get()
    token = response.xpath('//*[@name="__VIEWSTATE"]/@value').extract_first()
    generator = response.xpath('//*[@name="__VIEWSTATEGENERATOR"]/@value').extract_first()
    event = response.xpath('//*[@name="__EVENTVALIDATION"]/@value').extract_first()
    target = response.xpath('//select[2]/@name').extract_first()
    argument = response.xpath('//*[@name="__EVENTARGUMENT"]/@value').extract_first()
    return FormRequest.from_response(response,
                                     formdata={'__VIEWSTATE': token,
                                               '__VIEWSTATEGENERATOR': generator,
                                               '__EVENTVALIDATION': event,
                                               '__EVENTTARGET': target,
                                               '__EVENTARGUMENT': argument,
                                               'ctl00$ctl00$CPContent$ucSubMenu$ucLogin$txtUserName':'',
                                               'ctl00$ctl00$CPContent$ucSubMenu$ucLogin$txtPassword':'',
                                               'ctl00$ctl00$CPContent$CPMain$ucSeasonsDropdown$ddlSeasons': '62',
                                               'ctl00$ctl00$CPContent$CPMain$ucCupRoundsDropdown$ddlMatchRounds': '4'},
                                     callback=self.scrape_pages)

def scrape_pages (self, response):
    open_in_browser(response)
...