使用 selenium 登录 stackoverflow 可以正常工作,但使用 scrapy python 则不行。如何使用无头浏览登录?

2024-04-29

我一直在尝试自动登录 stackoverflow 来学习网络抓取。首先我尝试了 scrapy,但使用下面的代码我并没有那么幸运。

import scrapy
from scrapy.utils.response import open_in_browser

class QuoteSpider(scrapy.Spider):
    name = 'stackoverflow'
    start_urls = ['https://stackoverflow.com/users/login']


    def parse(self, response):
        token = response.xpath('.//*[@name="fkey"]/@value').extract_first()
        yield scrapy.FormRequest('https://stackoverflow.com/users/login?ssrc=head&returnurl=https://stackoverflow.com/',
        formdata = {
            'fkey': token,
            "ssrc": "head",
            'username': "[email protected] /cdn-cgi/l/email-protection",
            'password': 'example123',
            'oauth_version':'',
            'oauth_server':''
        },callback=self.startscraper)
    
    def startscraper(self,response):
        yield scrapy.Request('https://stackoverflow.com/users/12454709/gopal-kisi',callback=self.verifylogin)

    def verifylogin(self,response):
        open_in_browser(response)

所以,我后来尝试了selenium,我使用以下代码成功登录到stackoverflow。

from selenium import webdriver
import pandas as pd
import time

driver = webdriver.Chrome("./chromedriver.exe")
driver.get("https://stackoverflow.com/users/login?ssrc=head&returnurl=https%3a%2f%2fstackoverflow.com%2f")
time.sleep(2)
username = driver.find_element_by_xpath("//*[@id='email']")
username.clear()
username.send_keys("[email protected] /cdn-cgi/l/email-protection")
time.sleep(5)
password = driver.find_element_by_xpath("//*[@id='password']")
password.clear()
password.send_keys("example123")
time.sleep(0.5)
driver.find_element_by_xpath("//*[@id='submit-button']").click()
driver.close()

我知道 selenim 和 scrapy 是两种不同的方法。现在,对于抓取,我发现 scrapy 比 selenium 更容易处理和保存数据,而且它使用无头浏览,就像我需要的那样。

那么,有什么办法可以解决scrapy中的登录问题吗?或者,我可以将selenium与scrapy合并,这样我就可以使用selenium登录,然后剩余的工作可以由scrapy完成吗?


  • 好像是网址https://stackoverflow.com/users/login https://stackoverflow.com/users/login被 robots.txt 禁止,所以我不确定 stackoverflow 是否允许自动化
  • 您不需要 Selenium 来登录。您只需使用 Scrapy 即可。我根据他们官方的例子文档 https://docs.scrapy.org/en/latest/topics/request-response.html?highlight=from_response#topics-request-response-ref-request-userlogin。您可以使用 FromRequest.from_response 填充登录所需的大部分字段,只需添加正确的电子邮件和密码即可。以下内容在 scrapy shell 中适用于我:
from scrapy import FormRequest

url = "https://stackoverflow.com/users/login"
fetch(url)
req = FormRequest.from_response(
    response,
    formid='login-form',
    formdata={'email': '[email protected] /cdn-cgi/l/email-protection',
              'password': 'testpw'},
    clickdata={'id': 'submit-button'},
)
fetch(req)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 selenium 登录 stackoverflow 可以正常工作,但使用 scrapy python 则不行。如何使用无头浏览登录? 的相关文章

随机推荐

  • 在 Web API 2 中返回字符串

    听起来很简单 我还没有找到任何关于这方面的文档 也许我的措辞是错误的 所以如果是这样 一些关于这方面的好的文档将不胜感激 我只想返回一个字符串或字符串类型的模型 return string here 我每次都会收到此错误 Severity
  • 可基于多列格式化

    我正在使用该包formattable生成格式化表格 我发现了一个不错的资源在 R 中设置表格格式 http www r bloggers com formatting table output in r 但这里的箭头格式示例仅基于特定列 我
  • Windows 从属设备上的 Jenkins Git SSH 密钥

    目前 我们在 Windows 上有一个 Jenkins 主服务器 一个 ubuntu 从服务器和一个 Windows 从服务器 我正在尝试在 Windows 从机上设置 git msysgit 已安装 并且我将该目录包含在系统路径变量中 以
  • C++ 中的全局对象

    在下面的C 代码中 s分配在哪里 它使用堆 数据 bss 还是某种组合 我使用的是 Linux x86 平台 以防产生影响 有没有办法让 g 编译器向我显示布局 include
  • 为什么使用枚举而不是静态布尔?

    为什么在模板元编程中使用 enum 而不是 static const bool 被认为是更好的做法 我在 Alexandrescu 的书中读到过这一点 但找不到它 但我真的很想知道它 关键原因是 static bool 毕竟是一个变量 而
  • 通过与 cytoscape.js 中特定节点的连接来过滤图表

    Cytoscape 的新手 我有一张图 其中包含主导主网络和一些与我要删除的主网络未连接的较小网络 浏览文档我看不到明显的解决方案 我猜测可能需要一种自定义方法来循环所有节点 检查它们与主集群中最中心节点的图形距离 如果该距离未定义 则删除
  • 在 MySQL 中向 BIGINT 列添加索引有帮助吗?

    我有一个包含数百万个条目的表 以及一个包含BIGINT 20 每行的唯一值 它们不是主键 但在某些操作过程中 有数千个SELECTs 在中使用此列WHERE条款 问 向该列添加索引是否有帮助当条目数量增长到数百万时 我知道它适用于文本值 但
  • 如何解读这些时间戳?

    我正在尝试解析一些 xml 文件中写入的时间戳 大多数时间时间戳是这样的2009 07 22 07 00但有时我发现它们就像2009 07 22Z or 2009 07 22z 请帮助我如何解释这些 Z 以及如何解析它们 我认为这些 z 或
  • 使用 Liquid 标记获取 Jekyll 中的今天日期

    我认为这 应该 很容易 但我无法使用 Liquid 标记在 Jekyll 页面中显示今天的日期 根据文档 https github com Shopify liquid wiki Liquid for Designers 我应该能够这样做来
  • PCRE 库版本太旧

    Bug Genie 3 需要 PCRE 库 8 0 或更高版本 你有 版本 7 8 2008 09 05 将您的系统更新到最新版本 你常用的来源 在我查看问题并尝试通过以下步骤更新我的 PCRE 库后 wget the latest sou
  • IE7 中列表项之间的 CSS 间隙

    我无法消除 IE7 中列表项之间的间隙 HTML ul li div row 1 1 div div row 1 2 div li ul
  • Silverlight:创建圆形按钮模板

    我决定尝试制作一个圆形按钮 因此使用表达式混合 我在 xaml 上放置了一个按钮控件 然后 我通过选择 编辑控制部件 模板 gt 编辑副本 来创建一个模板 我正在尝试设计它 使按钮的左侧和右侧始终是完美的半圆 这样无论按钮长得多高或多宽 角
  • MySQL“插入...重复键”具有多个唯一键

    我一直在阅读如何使用MySQL在重复键上插入 看看它是否允许我避免选择一行 检查它是否存在 然后插入或更新 然而 当我阅读文档时 有一个地方让我感到困惑 文档是这样说的 如果指定 ON DUPLICATE KEY UPDATE 并且插入的行
  • 在 OpenGL 中,为什么 glVertexAttribPointer 要求“指针”参数以 void* 形式传入?

    规格为glVertexAttribPointer如下 void glVertexAttribPointer GLuint index GLint size GLenum type GLboolean normalized GLsizei s
  • 操作数类型冲突:uniqueidentifier 与 int 不兼容

    当我尝试创建下面的存储过程时 出现以下错误 操作数类型冲突 uniqueidentifier 与 int 不兼容 我不清楚是什么原因导致了这个错误 UserID 实际上是我所有表中的一个 int 有人可以告诉我我做错了什么吗 create
  • Pygame 简单循环在 Mac 上运行速度非常慢

    E 在 OS X 和 Linux 上进行相同的测试后 我可以确认以下情况仅发生在 OS X 上 在 Linux 上 它实际上以 1000 fps 的速度运行 正如我碰巧想知道的那样 有什么解释吗 感谢 TextMate 我更喜欢在 Mac
  • Spring Zuul:动态禁用到服务的路由

    我正在尝试禁用在运行时向 Eureka 注册的微服务的 Zuul 路由 我正在使用 Spring Boot 这是一个例子 localhost hello localhost world 这两个是注册的微服务 我想在运行时禁用到其中之一的路由
  • 迁移到 AndroidX 后,应用程序崩溃并尝试在空引用上调用 androidx.fragment.app.FragmentManagerImpl.isDestroyed()

    完整的堆栈仅包括 android 核心代码 java lang NullPointerException Attempt to invoke virtual method boolean androidx fragment app Frag
  • 如何将散景 vbar 图表参数与 groupby 对象一起使用?

    Question 下面的代码是来自 bokeh 文档的分组 vbar 图表示例 这个例子中有一些我无法理解的地方 Factor cmap 和 vbar 中的 cyl mfr 来自哪里 mpg mean 是否计算 mpg 列的平均值 如果那么
  • 使用 selenium 登录 stackoverflow 可以正常工作,但使用 scrapy python 则不行。如何使用无头浏览登录?

    我一直在尝试自动登录 stackoverflow 来学习网络抓取 首先我尝试了 scrapy 但使用下面的代码我并没有那么幸运 import scrapy from scrapy utils response import open in