使用scrapy模拟用户登录

时间:2014-10-26 06:48:21

标签: python scrapy

我正在学习如何使用Scrapy登录html表单。这是一个登录蜘蛛的代码示例,与Scrapy的教程稍作修改:

类LoginSpider(BaseSpider):     name =' example.com'     start_urls = [' http://www.example.com/users/login.php']

def parse(self, response):
    return [FormRequest.from_response(response,
                formdata={'username': 'wrongusername', 'password': 'wrongpassword'},
                callback=self.after_login)]

def after_login(self, response):
    # check login succeed before going on
    if "Invalid" in response.body:
        self.log("Login failed", level=log.ERROR)
        return
    else:
        print "Not forwarding to failed login page"

    # continue scraping with authenticated session...

我故意提供不正确的登录信息,以便搜索字符串"无效"。但是,控制台不会从日志中打印错误消息。 "用户名和#34;和#34;密码"对于表单中的输入字段是正确的名称,这应该不是问题。此外,"无效"输入错误的登录信息时,它会显示为字符串,因此不应该是问题。此外,似乎输入了错误的登录信息时,会显示错误消息,但它与原始登录页面具有相同的URL。如果网站没有将我转发到另一个页面,这会是一个问题吗?似乎scrapy正在搜索原始登录页面(当没有输入信息时),这就是为什么它找不到"无效"。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:-1)

尝试在response.body中找到“身份验证失败”而不是“无效”,如Scrapy manual中所述。