2017-05-07 3 views
0

Kontext:dryscrape: „Keine Route gefunden .....“

Ich versuche, mein eigenes Geld Aggregator zu codieren, weil die meisten der verfügbaren Tools auf dem Markt nicht alle Finanz-Websites noch nicht abdeckt. Ich benutze Python 2.7.9 auf einem raspberrypi.

Ich schaffte es, bis zu 2 meiner Konten bisher (eine Crow-Lending-Website und eine für meine Pension) dank Anfragen Bibliothek verbinden. Die dritte Website, die ich versuche zu aggregieren, gibt mir seit 2 Wochen jetzt harte Zeit und ihr Name ist https://www.amundi-ee.com.

Ich fand heraus, dass die Website tatsächlich JavaScript verwendet und nach vielen Recherchen endete ich mit dryscrape (ich kann Selen nicht verwenden, weil Arm nicht mehr unterstützt wird).

Ausgabe:

Bei der Ausführung von Code:

import dryscrape 

url='https://www.amundi-ee.com' 
extensionInit='/psf/#login' 
extensionConnect='/psf/authenticate' 
extensionResult='/psf/#' 
urlInit = url + extensionInit 
urlConnect = url + extensionConnect 
urlResult = url + extensionResult 

s = dryscrape.Session() 
s.visit(urlInit) 
print s.body() 
login = s.at_xpath('//*[@id="identifiant"]') 
login.set("XXXXXXXX") 
pwd = s.at_xpath('//*[@name="password"]') 
pwd.set("YYYYYYY") 
# Push the button 
login.form().submit() 
s.visit(urlConnect) 
print s.body() 
s.visit(urlResult) 

Es gibt ein Problem, wenn der Code Besuche urlConnect Linie 21, der Körper Druckleitung 22 gibt die folgende Liste:

{"code":405,"message":"No route found for \u0022GET \/authenticate\u0022: Method Not Allowed (Allow: POST)","errors":[]} 

Frage

Warum habe ich eine solche Fehlermeldung und wie kann ich mich auf der Website anmelden, um die gesuchten Daten abzurufen?

PS: Mein Code Inspiration kommt aus dieser Ausgabe Python dryscrape scrape page with cookies

+0

Verwenden Sie time.sleep (5) nach dem Anmelden. Dann versuchen Sie es erneut und sagen Sie, ob ein Fehler auftritt – Exprator

+0

Sorry, ich konnte es nicht früher testen, leider nach dem Einschalten des Schlafes direkt nach dem Login (login.form(). Submit()) Problem tritt immer noch auf (ich versuche auch die Zeit zu verdoppeln) –

+0

Eine Sache nach dem Login-Formular absenden, drucken Sie die aktuelle URL wie folgt, s.url() und prüfen Sie, ob die URL ist die, die Sie kratzen wollen. dann speichern Sie es in einer Variablen und dann s.visit (url), denn wenn Sie versuchen, auf eine Seite zuzugreifen, die Login-geschützt ist, wird es Fehler geben – Exprator

Antwort

0

ok so nach mehr als einem Monat versucht, diese nach unten zu bekämpfen, ich sehr erfreut bin zu sagen, dass ich es geschafft, endlich zu bekommen, was ich will

Was war das Problem?

Grundsätzlich 2 wichtige Dinge (vielleicht mehr, aber ich könnte zwischendurch vergessen habe):

  1. das Passwort über die Taste gedrückt werden, und die übrigen sind zufällig erzeugte so jedes Mal, wenn Sie tun müssen, zugreifen gut genug

Hier ist der endgültige Code eine neue Zuordnung

  • login.form().submit() auf der Seite der benötigten Daten um den Zugang war in Unordnung, indem war die Validate-Schaltfläche klicken, nicht hesitat Wenn Sie eine schlechte Verwendung finden, da ich ein Python-Novize und ein sporadischer Coder bin.

    import dryscrape 
    from bs4 import BeautifulSoup 
    from lxml import html 
    from time import sleep 
    from webkit_server import InvalidResponseError 
    from decimal import Decimal 
    import re 
    import sys 
    
    
    def getAmundi(seconds=0): 
    
        url = 'https://www.amundi-ee.com/psf' 
        extensionInit='/#login' 
        urlInit = url + extensionInit 
        urlResult = url + '/#' 
        timeoutRetry=1 
    
        if 'linux' in sys.platform: 
         # start xvfb in case no X is running. Make sure xvfb 
         # is installed, otherwise this won't work! 
         dryscrape.start_xvfb() 
    
        print "connecting to " + url + " with " + str(seconds) + "s of loading wait..." 
        s = dryscrape.Session() 
        s.visit(urlInit) 
        sleep(seconds) 
        s.set_attribute('auto_load_images', False) 
        s.set_header('User-agent', 'Google Chrome') 
        while True: 
         try: 
          q = s.at_xpath('//*[@id="identifiant"]') 
          q.set("XXXXXXXX") 
         except Exception as ex: 
          seconds+=timeoutRetry 
          print "Failed, retrying to get the loggin field in " + str(seconds) + "s" 
          sleep(seconds) 
          continue 
         break 
    
        #get password button mapping 
        print "loging in ..." 
        soup = BeautifulSoup(s.body()) 
        button_number = range(10) 
        for x in range(0, 10): 
        button_number[int(soup.findAll('button')[x].text.strip())] = x 
    
        #needed button 
        button_1 = button_number[1] + 1 
        button_2 = button_number[2] + 1 
        button_3 = button_number[3] + 1 
        button_5 = button_number[5] + 1 
    
        #push buttons for password 
        button = s.at_xpath('//*[@id="num-pad"]/button[' + str(button_2) +']') 
        button.click() 
        button = s.at_xpath('//*[@id="num-pad"]/button[' + str(button_1) +']') 
        button.click() 
        .............. 
    
        # Push the validate button 
        button = s.at_xpath('//*[@id="content"]/router-view/div/form/div[3]/input') 
        button.click() 
        print "accessing ..." 
        sleep(seconds) 
    
        while True: 
         try: 
          soup = BeautifulSoup(s.body()) 
          total_lended = soup.findAll('span')[8].text.strip() 
          total_lended = total_lended = Decimal(total_lended.encode('ascii','ignore').replace(',','.').replace(' ','')) 
          print total_lended 
    
         except Exception as ex: 
          seconds+=1 
          print "Failed, retrying to get the data in " + str(seconds) + "s" 
          sleep(seconds) 
          continue 
         break 
    
        s.reset() 
    
  • Verwandte Themen