You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Chrome/Firefox开发者工具获取Scrapy登录所需表单字段?

如何在Scrapy中找到Github登录表单的字段名?

我来给你详细讲讲怎么在Github上定位登录表单的字段,顺便分享通用的排查方法,帮你搞定后续其他网站的类似问题~

方法一:直接查看页面元素(Elements面板)

  1. 打开Github的登录页面,按下F12打开开发者工具,切换到Elements标签页。
  2. 点击页面上的用户名输入框,右键选择「检查」,开发者工具会自动定位到对应的HTML元素。你会看到这个输入框的代码类似:
    <input type="text" name="login" id="login_field" class="form-control input-block" tabindex="1" autocapitalize="off" autocorrect="off" autocomplete="username" autofocus="autofocus">
    
    这里的name="login"就是我们需要的用户名字段名。
  3. 同样的方式检查密码输入框,会看到它的name属性是password
    <input type="password" name="password" id="password" class="form-control form-control input-block" tabindex="2" autocomplete="current-password">
    
  4. 另外,Github的登录表单还包含一个authenticity_token的隐藏字段,用来做CSRF验证。不过Scrapy的FormRequest.from_response方法会自动提取这个字段,不需要我们手动填写到formdata里。

方法二:通过Network面板抓包(适合复杂场景)

如果有些网站的表单是动态生成的,或者你想确认实际提交的字段,用Network面板更准确:

  1. 打开开发者工具的Network标签页,点击左上角的「清空」按钮(垃圾桶图标),确保面板是干净的。
  2. 回到登录页面,输入你的用户名和密码,点击「Sign in」按钮。
  3. 在Network面板里找到类型为POST的请求(Github这里的请求URL是https://github.com/session),点击它查看详情。
  4. 切换到Payload(或Form Data)标签,就能看到实际提交的所有字段:
    • login:你的用户名/邮箱
    • password:你的密码
    • authenticity_token:自动生成的令牌
    • 还有其他比如webauthn-support这类可选字段,一般不需要管。

适配Scrapy的代码示例

结合Github的字段,你的Scrapy登录代码应该写成这样:

def start_requests(self):
    yield scrapy.Request(url='https://github.com/login', callback=self.login)

def login(self, response):
    # 使用FormRequest.from_response自动处理表单和CSRF令牌
    yield scrapy.FormRequest.from_response(
        response,
        formdata={
            'login': '你的Github用户名/邮箱',
            'password': '你的Github密码'
        },
        callback=self.after_login
    )

def after_login(self, response):
    # 验证是否登录成功,比如检查页面是否包含你的用户名
    if '你的用户名' in response.text:
        self.logger.info('登录成功!')
        # 这里可以继续后续的爬取逻辑
    else:
        self.logger.error('登录失败,请检查用户名和密码!')

通用小技巧

不管面对哪个网站,记住这两点:

  • 优先看Elements面板里输入框的name属性,这是表单字段的核心标识;
  • 如果遇到动态加载的表单,或者字段名有混淆,就用Network面板抓实际提交的POST请求,看Payload里的参数名,这是最准确的。

内容的提问来源于stack exchange,提问作者user8314628

火山引擎 最新活动