6

这是我这几天一直在努力解决的问题。我正在尝试自动从网站下载文件,并希望其他具有类似结构的网站。我知道该网站是 ASP 并且我知道所有下载链接都调用一个 doPostBack 函数,该函数具有以下形式:

function __doPostBack(eventTarget, eventArgument) {
  if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
  theForm.__EVENTTARGET.value = eventTarget;
  theForm.__EVENTARGUMENT.value = eventArgument;
  theForm.submit();
  }
} 

我尝试通过 selenium 和 phantomjs 单击链接,但失败了。然后我决定尝试模拟函数调用。我为此使用了机械化,并执行了以下操作:

def python_func(self,url,target,argument):
  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)
  form_num = 0
  while True:
    try:
       inner_browser.select_form(nr=form_num)
    except FormNotFoundError:
         return False
    br.form.set_all_readonly(False)
    inner_browser["__EVENTTARGET"] = targ
    inner_browser["__EVENTARGUMENT"] = arg
    response = inner_browser.submit()

不幸的是,该表单似乎没有提交控件,并且我从提交调用中一无所获。我还尝试通过手动编码 ASP doPostBack 的四个字段来模拟发布请求。它们是 eventtarget、eventargument、viewstate(具有默认值)和 eventvalidaiton(也具有默认值)。这也不起作用——我最终重新获得了 Ginnie Mae 网站。

我假设我可以以某种方式获取 doPostBack 函数并使用 JavaScript 解释器直接运行它,但我只是不知道该怎么做。到目前为止,我有 mechanize、selenium 和 phantomJS 为我工作,但我不确定是否可以利用其中任何一个来运行代码并下载文件。

4

0 回答 0