【问题标题】:Scrapy to bypass an alert message with form authenticationScrapy 通过表单身份验证绕过警报消息
【发布时间】:2017-11-09 03:36:02
【问题描述】:

Scrapy 是否可以抓取警报消息?

例如链接 http://domainhere/admin,一旦在实际浏览器中加载,就会出现一条警告消息,其中包含填写用户名和密码的表单。

或者有没有办法检查警报消息中的表格以了解要填写哪些参数?

PS:我确实有这个网站的凭据,我只是想通过网络爬取自动化流程。

谢谢。

【问题讨论】:

  • @Fan_of_Martijn_Pieters 感谢这个。我检查了代码,它很有帮助,但下一个问题是我如何查看警报消息的 DOM。一旦我在未登录的情况下继续链接,警告消息会在正文中显示 else 错误消息。
  • 我需要获取警报消息中内容的选择器。然后我就可以获取输入中声明的名称作为表单的参数。

标签: python web-scraping scrapy web-crawler


【解决方案1】:

为了实现这一目标,我做了以下事情:

  1. 观察了身份验证后需要处理页面的数据。
  2. 使用 Chrome 的“网络”选项卡中的开发人员工具,我检查了请求标头。经观察,需要授权。
  3. 为了验证第 2 步,我使用了 Postman。使用 Postman 中的 Authorization,Basic Auth 类型,填写用户名和密码将为 Authorization 标头生成相同的值。发送 POST 请求后,它会加载所需的页面并绕过身份验证。
  4. 如果请求标头下的授权值相同,请将值存储在 Scraper 类中。
  5. 使用带有 headers 参数的 scrapy.Request 函数。

代码:

import scrapy

class TestScraper(scrapy.Spider):
    handle_httpstatus_list = [401]
    name = "Test"
    allowed_domains = ["xxx.xx.xx"]
    start_urls = ["http://testdomain/test"]

    auth = "Basic [Key Here]"

    def parse(self, response):
        return scrapy.Request(
            "http://testdomain/test",
            headers={'Authorization': self.auth},
            callback=self.after_login
        )

    def after_login(self, response):
        self.log(response.body)

现在,您可以在认证过程后抓取页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    相关资源
    最近更新 更多