2017-09-22 4 views
1

Ich benutze Scrapy + Splash-Plugin, ich habe eine Schaltfläche, die ein Download-Ereignis über Ajax auslöst, muss ich die heruntergeladene Datei, aber weiß nicht wie.Scrapy Splash Download-Datei von js klicken Ereignis

Mein Lua Script ist so etwas wie dieses

function main(splash) 
     splash:init_cookies(splash.args.cookies) 
     assert(splash:go{ 
      splash.args.url, 
      headers=splash.args.headers, 
      http_method=splash.args.http_method, 
      body=splash.args.body, 
     }) 
     assert(splash:wait(0.5)) 
        local get_dimensions = splash:jsfunc([[ 
      function() { 
       var rect = document.querySelector('a[aria-label="Download XML"]').getClientRects()[0]; 
       return {"x": rect.left, "y": rect.top} 
      } 
     ]]) 
     splash:set_viewport_full() 
     splash:wait(0.1) 
     local dimensions = get_dimensions() 
     -- FIXME: button must be inside a viewport 
     splash:mouse_click(dimensions.x, dimensions.y) 
     splash:wait(0.1) 
     return splash:html() 
    end 

Meine Anfrage Objekt aus meiner Spinne:

yield SplashFormRequest(self.urls['url'], 
          formdata=FormBuilder.build_form(response, some_object[0]), 
          callback=self.parse_cuenta, 
          cache_args=['lua_source'], 
          endpoint='execute', 
          args={'lua_source': self.script_click_xml}) 

Vielen Dank im Voraus

+0

Hallo @ delpo, hast du die Lösung? –

+0

Hey @SanoopPK, ich habe keine Lösung – delpo

Antwort

1

ich das gerade versucht, mit SplashFormRequest und es sieht aus wie Spritzen wird nicht für dich arbeiten. Stattdessen können Sie die gleiche Ajax-Anfrage mit Python Requests senden.

hier ist ein Beispiel

data = {'__EVENTTARGET': 'main_0$body_0$lnkDownloadBio', 
     '__EVENTARGUMENT': '', 
     '__VIEWSTATE': viewstate, 
     '__VIEWSTATEGENERATOR': viewstategen, 
     '__EVENTVALIDATION': eventvalid, 
     'search': '', 
     'filters': '', 
     'score': ''} 

HEADERS = { 
     'Content-Type':'application/x-www-form-urlencoded', 
     'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36', 
     'Accept': 'text/html, application/xhtml + xml, application/xml;q = 0.9, image/webp, image/apng, */*;q = 0.8' 
    } 

data = urllib.urlencode(data) 
r = requests.post(submit_url, data=data, allow_redirects=False, headers=HEADERS) 
filename = 'name-%s.pdf' % item['first_name'] 
with open(filename, 'wb') as f: 
    f.write(r.content) 

Bitte stellen Sie sicher, dass die Daten und Header sind Sie richtig zu senden.