Ich habe ein Skript meine akzeptierte Lösungen zu schreiben versucht, auf SPOJ See moreAnmeldung Automatisierung und kriechenden mit Scrapy Python
ich bei der Automatisierung der Login-Prozess stecken geblieben abzurufen. Ich fand Scrapy schwer zu verstehen. Nachdem man durch die Dokumentation und den Codebeispielen viele Male habe ich eine vage Vorstellung von dem, was hinter den Kulissen passiert, und das ist, wo ich jetzt stehen:
(ich habe den Code an erforderlichen Stellen kommentiert)
import os
import os.path
import scrapy
import urllib.request
from scrapy.selector import HtmlXPathSelector
from scrapy.http import Request
from bs4 import BeautifulSoup
class LoginSpider(scrapy.Spider):
name = 'spoj'
start_urls = ['http://www.spoj.com/login']
outputFile = open('output.txt' , 'w')
def parse(self, response):
username = input('Enter username\n')
password = input('Enter password\n')
return scrapy.FormRequest.from_response(
response,
formdata={'username': username, 'password': password},
callback=self.after_login
)
def after_login(self, response):
# Even if I type in correct username and password it always leads to
# authentication faliure and the following if statement evaluates to true.
if str.encode('Authentication failed!') in response.body:
self.logger.error("Login failed")
print ('Incorrect credentials')
return
print('lol') # ofcourse this isn't printed
return scrapy.Request(url = "http://www.spoj.com/myaccount/" , callback = self.retrieve_codes)
# needless to say, the following function is never called
def retrieve_codes(self, response):
print('Hello testing!')
url = 'http://www.spoj.com/files/src/16731976/'
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html , 'html.parser')
self.outputFile.write(str(soup.prettify()))
In der Dokumentation war es if "authentication failed" in response.body:
, die ich
- ich war immer diesen Fehler ist
geändertif str.encode('Authentication failed!') in response.body:
Gründea byte like object is required not 'str'
- Bei Eingabe falscher Zugangsdaten wird
Authentication failed!
angezeigt und nichtauthentication failed
. Wir müssen hier genau sein.
Bitte sagen Sie mir, wo ich falsch mache. Ich habe keine guten Ressourcen im Netz gefunden, die die Formvalidierung im Detail diskutieren. Nach dem Sehen this code from docs meine ersten Fragen waren,
- Ist dies der einzige Weg, es zu tun?
- Funktioniert diese Methode für jede Website? Weil ich gelernt habe, dass die Komplexität dieses Prozesses von Ort zu Ort variiert.
- Kann ich eine noch anschaulichere Erklärung dafür finden, was dahinter passiert?
Ich habe auch versucht, Robobrowser, aber vergeblich. Ich erwartete eine gute Dokumentation wie die einer schönen Suppe.
Danke!
danke! :) Ich wusste nicht, dass der Wert des Attributs 'name' in Formulardaten verwendet wird. Meine beschämende Ignoranz –