Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用Python Mechanize筛选aspx-Javascript表单提交_Asp.net_Python_Mechanize_Scraperwiki - Fatal编程技术网

Asp.net 使用Python Mechanize筛选aspx-Javascript表单提交

Asp.net 使用Python Mechanize筛选aspx-Javascript表单提交,asp.net,python,mechanize,scraperwiki,Asp.net,Python,Mechanize,Scraperwiki,我试图在scraperwiki()上使用Mechanize/Python刮取英国食品评级机构数据aspx seach结果页面(例如),但在尝试跟踪“下一步”页面链接时遇到了一个问题,该链接具有以下形式: <input type="submit" name="ctl00$ContentPlaceHolder1$uxResults$uxNext" value="Next >" id="ctl00_ContentPlaceHolder1_uxResults_uxNext" title="N

我试图在scraperwiki()上使用Mechanize/Python刮取英国食品评级机构数据aspx seach结果页面(例如),但在尝试跟踪“下一步”页面链接时遇到了一个问题,该链接具有以下形式:

<input type="submit" name="ctl00$ContentPlaceHolder1$uxResults$uxNext" value="Next >" id="ctl00_ContentPlaceHolder1_uxResults_uxNext" title="Next >" />

表单处理程序如下所示:

<form method="post" action="QuickSearch.aspx?q=po30" onsubmit="javascript:return WebForm_OnSubmit();" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'ctl00_ContentPlaceHolder1_buttonSearch')" id="aspnetForm">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />

当我手动单击“下一步链接”时,HTTP跟踪会将_EVENTTARGET显示为空?我在其他scraper上找到的所有cribs都显示了对uu EVENTTARGET的操作,作为处理下一页的方式

事实上,我不确定我想刮的页面如何加载到下一页?无论我向scraper抛出什么,它都只能加载第一个结果页面。(即使能够更改每页的结果数量也会很有用,但我也不知道如何做到!)


所以-关于如何将第1+N个结果页面刮取为N>0,有什么想法吗?

Mechanize不处理JavaScript

但是,有很多方法可以处理这个问题,包括(使用Jython)或

以下是使用SeleniumRC的方法:

import selenium
sel=selenium.selenium("localhost",4444,"*firefox", "http://ratings.food.gov.uk")   
sel.start()
sel.open("QuickSearch.aspx?q=po30")
sel.click('ctl00$ContentPlaceHolder1$uxResults$uxNext')
另请参见以下相关SO问题:


  • Mechanize不处理javascript,但对于这种特殊情况,不需要它

    首先,我们使用mechanize打开结果页面

    url = 'http://ratings.food.gov.uk/QuickSearch.aspx?q=po30'
    br = mechanize.Browser()
    br.set_handle_robots(False)
    br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
    br.open(url)
    response = br.response().read()
    
    然后我们选择aspnet表单:

    br.select_form(nr=0) #Select the first (and only) form - it has no name so we reference by number
    
    表单有5个提交按钮-我们希望提交一个按钮,将我们带到下一个结果页:

    response = br.submit(name='ctl00$ContentPlaceHolder1$uxResults$uxNext').read()  #"Press" the next submit button
    
    表单中的其他提交按钮包括:

    ctl00$uxLanguageSwitch # Switch language to Welsh
    ctl00$ContentPlaceHolder1$uxResults$Button1 # Search submit button
    ctl00$ContentPlaceHolder1$uxResults$uxFirst # First result page
    ctl00$ContentPlaceHolder1$uxResults$uxPrevious # Previous result page
    ctl00$ContentPlaceHolder1$uxResults$uxLast # Last result page
    
    在mechanize中,我们可以获得如下表单信息:

    for form in br.forms():
        print form