簡體   English   中英

Ruby Mechanize ASP網頁

[英]Ruby Mechanize ASP webpage

我試圖模仿使用Mechanize填寫表格。 但是,它是一個ASP網頁,即使我認為我正確地處理了doPostbacks,但是當我手動填寫該頁面時,使用仍能正常工作的信息仍然會出現錯誤(錯誤是該頁面說它正在“正在進行例行維護” ”,因為我缺少必需的參數,所以這一定會發生。

當我手動提交表單時,這是對服務器的請求(可在Chrome Inspector工具的“網絡”標簽中找到):

Remote Address:209.67.234.13:80
Request URL:http://www.luckystarbus.com/Purchase.aspx
Request Method:POST
Status Code:302 Found
Request Headersview parsed
POST /Purchase.aspx HTTP/1.1
Host: www.luckystarbus.com
Connection: keep-alive
Content-Length: 3450
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://www.luckystarbus.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://www.luckystarbus.com/Purchase.aspx
Accept-Encoding: gzip,deflate
Accept-Language: en-US,en;q=0.8,es;q=0.6
Cookie: ASP.NET_SessionId=2mw5a43zz43nemyj5e4glq45; _gat=1; _ga=GA1.2.181151250.1412747640
Form Dataview sourceview URL encoded
__EVENTTARGET:
__EVENTARGUMENT:
__LASTFOCUS:
__VIEWSTATE:/wEPDwUJMzcyMTg0Mjk0D2QWAmYPZBYCAgMPZBYGAgMPDxYCHgtOYXZpZ2F0ZVVybAUdL1B1cmNoYXNlLmFzcHg/TGFuZ3VhZ2U9ZXMtTVhkZAIGDw8WAh4EVGV4dAXmCDxhIGhyZWY9Ii9wcm9tby9OWW1hcC5wZGYiIHRhcmdldD1fYmxhbms+PHU+PEZPTlQgQ09MT1I9I0ZGMDAwMCBTSVpFPTU+QVRURU5USU9OISEgTkVXIFlPUksgVElDS0VUIENPVU5URVIgTE9DQVRJT04gSEFTIE1PVkVEIFRPIDE0NSBDQU5BTCBTVFJFRVQ8QlI+IA0KPEJSPllvdSBNVVNUIGNoZWNrIGluIGF0IDE0NSBDYW5hbCBTdHJlZXQgYmVmb3JlIGJvYXJkaW5nLiBCdXMgUElDS1VQIGFuZCBEUk9QT0ZGIGxvY2F0aW9uIHJlbWFpbnMgYXQgNTUgQ2hyeXN0aWUgU3QuIFRoYW5rIFlvdSEgLUNsaWNrIEhFUkUgdG8gc2VlIG1hcC48L0ZPTlQ+PC91PjwvYT48QlI+DQo8QlI+PEZPTlQgQ09MT1I9IzRDQzQxNyBTSVpFPTQ+WWVzISBMdWNreSBTdGFyIGlzIG9wZW4gYWdhaW4uIEJ1c2VzIGFyZSBydW5uaW5nIGZyb20gTmV3IFlvcmsgQ2hpbmF0b3duIHRvIEJvc3RvbiBDaGluYXRvd24gYW5kIEJvc3RvbiBDaGluYXRvd24gdG8gTmV3IFlvcmsgQ2hpbmF0b3duLjxCUj4gDQo8QlI+UGxlYXNlIHNlZSBvdXIgc2NoZWR1bGVzIGFuZCBib29rIHRpY2tldHMgb25saW5lLjwvRk9OVD48QlI+DQoNCjxCUj48Rk9OVCBDT0xPUj0jNzM2QUZGIFNJWkU9Mz5PdXIgTmV3IFlvcmsgbG9jYXRpb24gaGFzIGZyZWUgV0lGSSBhbmQgb3V0bGV0cyB0byBjaGFyZ2UgeW91ciBtb2JpbGUgZGV2aWNlcy4gV2UgYWxzbyBoYXZlIGEgVFYgc28geW91IGNhbiBjYXRjaCB1cCBvbiB0aGUgbGF0ZXN0IG5ld3MhPC9GT05UPjxCUj4NCiANCjxCUj48Rk9OVCBDT0xPUj0jMUY0NUZDIFNJWkU9Mz4qT25saW5lIHRpY2tldHMgbXVzdCBiZSBwdXJjaGFzZWQgYXQgbGVhc3QgMSBob3VyIGJlZm9yZSB0aGUgZGVwYXJ0dXJlIHRpbWUuIEFueXRpbWUgd2l0aGluIHRoaXMsIHlvdSBjYW4gcHVyY2hhc2Ugc2FtZSBkYXkgdGlja2V0cyBhdCBvdXIgY291bnRlcio8L0ZPTlQ+PEJSPg0KDQo8QlI+PEZPTlQgQ09MT1I9RkYwMDAwIFNJWkU9Mz4qRGlzY291bnQgVGlja2V0cyBhcmUgc3ViamVjdCB0byBvdXIgRGlzY291bnQgVGlja2V0IFBvbGljeS4gVGlja2V0IERhdGUgYW5kIFRpbWUgY2Fubm90IGJlIGNoYW5nZWQgYWZ0ZXIgcHVyY2hhc2UgYW5kIHRoZXkgYXJlIG5vbnJlZnVuZGFibGUqPC9GT05UPg0KDQpkZAIHD2QWDAIBDxBkZBYBAgFkAgUPEGQQFSgBMQEyATMBNAE1ATYBNwE4ATkCMTACMTECMTICMTMCMTQCMTUCMTYCMTcCMTgCMTkCMjACMjECMjICMjMCMjQCMjUCMjYCMjcCMjgCMjkCMzACMzECMzICMzMCMzQCMzUCMzYCMzcCMzgCMzkCNDAVKAExATIBMwE0ATUBNgE3ATgBOQIxMAIxMQIxMgIxMwIxNAIxNQIxNgIxNwIxOAIxOQIyMAIyMQIyMgIyMwIyNAIyNQIyNgIyNwIyOAIyOQIzMAIzMQIzMgIzMwIzNAIzNQIzNgIzNwIzOAIzOQI0MBQrAyhnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZGQCCQ8QDxYCHgtfIURhdGFCb3VuZGdkDxYCAgECAhYCEAUKQm9zdG9uLCBNQQUKQm9zdG9uLCBNQWcQBRFOZXcgWW9yayBDaXR5LCBOWQURTmV3IFlvcmsgQ2l0eSwgTllnZGQCDQ8QDxYCHwJnZBAVARFOZXcgWW9yayBDaXR5LCBOWRUBATEUKwMBZ2RkAhUPDxYIHglCYWNrQ29sb3IKNB8BZR4HRW5hYmxlZGgeBF8hU0ICCGRkAh8PD2QPEBYBZhYBFgIeDlBhcmFtZXRlclZhbHVlBQpCb3N0b24sIE1BFgFmZGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFFmN0bDAwJE1haW5Db250ZW50JGJ0R29hbBSsBVNn5gBofKlBOku93mxXVw==
__VIEWSTATEGENERATOR:C7C53EDD
__EVENTVALIDATION:/wEWNwKs4av/BwLuseWwCgLV3sKgCwKn3JGKDQLJj5y8CgLIj5y8CgLLj5y8CgLKj5y8CgLNj5y8CgLMj5y8CgLPj5y8CgLej5y8CgLRj5y8CgLJj9y/CgLJj9C/CgLJj9S/CgLJj+i/CgLJj+y/CgLJj+C/CgLJj+S/CgLJj/i/CgLJj7y8CgLJj7C8CgLIj9y/CgLIj9C/CgLIj9S/CgLIj+i/CgLIj+y/CgLIj+C/CgLIj+S/CgLIj/i/CgLIj7y8CgLIj7C8CgLLj9y/CgLLj9C/CgLLj9S/CgLLj+i/CgLLj+y/CgLLj+C/CgLLj+S/CgLLj/i/CgLLj7y8CgLLj7C8CgLKj9y/CgKEqZSECQKEqZSECQKu98XRCAKppL+gBwKztP72DgKw7NHHAgLe4cH0AgLmvYqoAgLczuTwCAKkgd7NDALA6+GiC77wn7OOuuAuAIz5dzZgP6GxLs9S
ctl00$MainContent$rbTripType:One
ctl00$MainContent$numPassengers:1
ctl00$MainContent$ddDepartureCity:Boston, MA
ctl00$MainContent$ddArrivalCity:1
ctl00$MainContent$sd:10/17/2014
ctl00$MainContent$rbFareType:Lowest
ctl00$MainContent$btGo.x:64
ctl00$MainContent$btGo.y:13

因此,我嘗試使用Mechanize模仿這些輸入中的每一個:

def search
  agent = Mechanize.new
  url = "http://www.luckystarbus.com"
  page = agent.get(url)
  form = page.form("aspnetForm")
  form.radiobutton_with(value: 'One').check
  form.field_with(name: 'ctl00$MainContent$ddDepartureCity').options[1].select
  form.add_field!('__EVENTARGUMENT', '')
  form.add_field!('__EVENTTARGET', '')
  form.add_field!('__LASTFOCUS', '')
  form.add_field!('ctl00$MainContent$btGo.x',64)
  form.add_field!('ctl00$MainContent$btGo.y',13)
  form.field_with(name: 'ctl00$MainContent$sd').value = "10/24/2014"
  form.radiobutton_with(value: 'Lowest').check
  page = form.click_button
end

我也嘗試按照另一個SO答案的建議發布參數,但是得到了相同的錯誤:

def search
  agent = Mechanize.new
  agent.post("http://www.luckystarbus.com/Purchase.aspx", {
    'ctl00$MainContent$rbTripType'=>'One',
    'ctl00$MainContent$numPassengers'=>'1',
    'ctl00$MainContent$ddArrivalCity'=>'New%20York%2C+NY',
    'ctl00$MainContent$ddDepartureCity'=>'Boston%2C+MA',
    'ctl00$MainContent$sd'=>'10%2F24%2F2014',
    'ctl00$MainContent$rbFareType'=>'Lowest',
    'ctl00$MainContent$btGo.x'=>64,
    'ctl00$MainContent$btGo.y'=>13,
    '__EVENTARGUMENT'=>'',
    '__EVENTTARGET'=>'',
    '__LASTFOCUS'=>''
    })
end

我想找回的頁面應該有標題“選擇時間表”。 以這種方式直接提交參數時,我是否缺少一種方法? 每次輸入帶有doPostback的輸入時,是否應該執行form.click_button

是的,如果需要,您需要設置doPostBack值。 假設表單具有:

<form onsubmit="doPostback('foo', 'bar')">

然后進行機械化,您將:

form['__EVENTTARGET'] = 'foo'
form['__EVENTARGUMENT'] = 'bar'

如果仍然無法獲取,請在瀏覽器中發出請求,然后從那里獲取值:

page = @agent.get 'http://www.luckystarbus.com/'
form = page.form

form['ctl00$MainContent$rbTripType'] = 'One'
form['ctl00$MainContent$numPassengers'] = '1'
form['ctl00$MainContent$ddDepartureCity'] = 'Boston, MA'
form['ctl00$MainContent$ddArrivalCity'] = '1'
form['ctl00$MainContent$sd'] = '10/17/2014'
form['ctl00$MainContent$rbFareType'] = 'Lowest'

form['__EVENTTARGET'] = 'ctl00$MainContent$rbTripType$1'
form['__EVENTARGUMENT'] = ''
form['__VIEWSTATE'] = '/wEPDwUJMzcyMTg0Mjk0D2QWAmYPZBYCAgMPZBYGAgMPDxYCHgtOYXZpZ2F0ZVVybAUdL1B1cmNoYXNlLmFzcHg/TGFuZ3VhZ2U9ZXMtTVhkZAIGDw8WAh4EVGV4dAXmCDxhIGhyZWY9Ii9wcm9tby9OWW1hcC5wZGYiIHRhcmdldD1fYmxhbms+PHU+PEZPTlQgQ09MT1I9I0ZGMDAwMCBTSVpFPTU+QVRURU5USU9OISEgTkVXIFlPUksgVElDS0VUIENPVU5URVIgTE9DQVRJT04gSEFTIE1PVkVEIFRPIDE0NSBDQU5BTCBTVFJFRVQ8QlI+IA0KPEJSPllvdSBNVVNUIGNoZWNrIGluIGF0IDE0NSBDYW5hbCBTdHJlZXQgYmVmb3JlIGJvYXJkaW5nLiBCdXMgUElDS1VQIGFuZCBEUk9QT0ZGIGxvY2F0aW9uIHJlbWFpbnMgYXQgNTUgQ2hyeXN0aWUgU3QuIFRoYW5rIFlvdSEgLUNsaWNrIEhFUkUgdG8gc2VlIG1hcC48L0ZPTlQ+PC91PjwvYT48QlI+DQo8QlI+PEZPTlQgQ09MT1I9IzRDQzQxNyBTSVpFPTQ+WWVzISBMdWNreSBTdGFyIGlzIG9wZW4gYWdhaW4uIEJ1c2VzIGFyZSBydW5uaW5nIGZyb20gTmV3IFlvcmsgQ2hpbmF0b3duIHRvIEJvc3RvbiBDaGluYXRvd24gYW5kIEJvc3RvbiBDaGluYXRvd24gdG8gTmV3IFlvcmsgQ2hpbmF0b3duLjxCUj4gDQo8QlI+UGxlYXNlIHNlZSBvdXIgc2NoZWR1bGVzIGFuZCBib29rIHRpY2tldHMgb25saW5lLjwvRk9OVD48QlI+DQoNCjxCUj48Rk9OVCBDT0xPUj0jNzM2QUZGIFNJWkU9Mz5PdXIgTmV3IFlvcmsgbG9jYXRpb24gaGFzIGZyZWUgV0lGSSBhbmQgb3V0bGV0cyB0byBjaGFyZ2UgeW91ciBtb2JpbGUgZGV2aWNlcy4gV2UgYWxzbyBoYXZlIGEgVFYgc28geW91IGNhbiBjYXRjaCB1cCBvbiB0aGUgbGF0ZXN0IG5ld3MhPC9GT05UPjxCUj4NCiANCjxCUj48Rk9OVCBDT0xPUj0jMUY0NUZDIFNJWkU9Mz4qT25saW5lIHRpY2tldHMgbXVzdCBiZSBwdXJjaGFzZWQgYXQgbGVhc3QgMSBob3VyIGJlZm9yZSB0aGUgZGVwYXJ0dXJlIHRpbWUuIEFueXRpbWUgd2l0aGluIHRoaXMsIHlvdSBjYW4gcHVyY2hhc2Ugc2FtZSBkYXkgdGlja2V0cyBhdCBvdXIgY291bnRlcio8L0ZPTlQ+PEJSPg0KDQo8QlI+PEZPTlQgQ09MT1I9RkYwMDAwIFNJWkU9Mz4qRGlzY291bnQgVGlja2V0cyBhcmUgc3ViamVjdCB0byBvdXIgRGlzY291bnQgVGlja2V0IFBvbGljeS4gVGlja2V0IERhdGUgYW5kIFRpbWUgY2Fubm90IGJlIGNoYW5nZWQgYWZ0ZXIgcHVyY2hhc2UgYW5kIHRoZXkgYXJlIG5vbnJlZnVuZGFibGUqPC9GT05UPg0KDQpkZAIHD2QWDAIBDxBkZBYAZAIFDxBkEBUoATEBMgEzATQBNQE2ATcBOAE5AjEwAjExAjEyAjEzAjE0AjE1AjE2AjE3AjE4AjE5AjIwAjIxAjIyAjIzAjI0AjI1AjI2AjI3AjI4AjI5AjMwAjMxAjMyAjMzAjM0AjM1AjM2AjM3AjM4AjM5AjQwFSgBMQEyATMBNAE1ATYBNwE4ATkCMTACMTECMTICMTMCMTQCMTUCMTYCMTcCMTgCMTkCMjACMjECMjICMjMCMjQCMjUCMjYCMjcCMjgCMjkCMzACMzECMzICMzMCMzQCMzUCMzYCMzcCMzgCMzkCNDAUKwMoZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2RkAgkPEA8WAh4LXyFEYXRhQm91bmRnZA8WAgIBAgIWAhAFCkJvc3RvbiwgTUEFCkJvc3RvbiwgTUFnEAURTmV3IFlvcmsgQ2l0eSwgTlkFEU5ldyBZb3JrIENpdHksIE5ZZ2RkAg0PEA8WAh8CZ2QQFQERTmV3IFlvcmsgQ2l0eSwgTlkVAQExFCsDAWdkZAIVDw8WCB4JQmFja0NvbG9yCjQfAWUeB0VuYWJsZWRoHgRfIVNCAghkZAIfDw9kDxAWAWYWARYCHg5QYXJhbWV0ZXJWYWx1ZQUKQm9zdG9uLCBNQRYBZmRkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBRZjdGwwMCRNYWluQ29udGVudCRidEdvwbhqhkFFsrlXS0S0mNHMfZU317w='
form['__EVENTVALIDATION'] = '/wEWNwKf77e6AwLuseWwCgLV3sKgCwKn3JGKDQLJj5y8CgLIj5y8CgLLj5y8CgLKj5y8CgLNj5y8CgLMj5y8CgLPj5y8CgLej5y8CgLRj5y8CgLJj9y/CgLJj9C/CgLJj9S/CgLJj+i/CgLJj+y/CgLJj+C/CgLJj+S/CgLJj/i/CgLJj7y8CgLJj7C8CgLIj9y/CgLIj9C/CgLIj9S/CgLIj+i/CgLIj+y/CgLIj+C/CgLIj+S/CgLIj/i/CgLIj7y8CgLIj7C8CgLLj9y/CgLLj9C/CgLLj9S/CgLLj+i/CgLLj+y/CgLLj+C/CgLLj+S/CgLLj/i/CgLLj7y8CgLLj7C8CgLKj9y/CgKEqZSECQKEqZSECQKu98XRCAKppL+gBwKztP72DgKw7NHHAgLe4cH0AgLmvYqoAgLczuTwCAKkgd7NDALA6+GiC9RzJOOGhIrLnJW1ydqt1vZKIsKV'
form['ctl00$MainContent$btGo.x'] = 0
form['ctl00$MainContent$btGo.y'] = 0

page = form.submit

為我工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM