0

我是 Scrapy 的新手,我正在尝试登录工作,从 shell 开始。这是我要登录的网站:

https://www.acdd.com/customer/account/login/

首先我做了

from scrapy.http import FormRequest

然后我做了

token = response.xpath('//*[@name="form_key"]/@value').extract_first()获取令牌并且输出看起来正确。然后我做了

FormRequest.from_response(response,formdata={'form_key': token,'login[customerid]': '12345','login[username]': 'myaddress@email.com','login[password]': 'mysecret'})

它输出

<GET https://www.acdd.com/catalogsearch/result/?q=&login%5Bcustomerid%5D=12345&login%5Busername%5D=myaddress%40email.com&login%5Bpassword%5D=mysecret&form_key=abcdef12345>

如果我这样做view(response),它只会显示登录页面,而不是应该显示的用户页面。我一直在关注教程和示例,但我认为这个站点可能与我使用的简单示例有所不同。我使用 Firefox 登录并查看开发人员工具以查看它发布的表单数据,并且我拥有所有元素。看起来,当表单打开时https://www.acdd.com/customer/account/login/,它实际上发布到https://www.acdd.com/customer/account/login/Post. 我试图在 shell 中发布到该页面,但没有表单元素。这超出了我使用过的基本示例。任何帮助表示赞赏。

4

1 回答 1

0

您没有选择目标表单,Scrapy 使用页面上的第一个(搜索表单):

FormRequest.from_response(
    response=response,
    formid="login-form",
    formdata={
        'login[customerid]': '12345',
        'login[username]': 'myaddress@email.com',
        'login[password]': 'mysecret',
        'send': "",
    }
)

你也不需要form_key在这里,因为 Scrapy 会为你从表单中获取它。 更新尝试添加send密钥。

于 2019-08-20T03:34:54.130 回答