You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy登录后发起请求自动登出问题求助

Scrapy登录后请求自动登出问题排查

用Scrapy登录oddsportal.com后,发起/results/请求会被自动登出。使用Selenium可正常完成登录后访问该页面的操作,但Scrapy复现始终失败。试过50+Stack Overflow上的解决方案,也在Reddit、GitHub等Scrapy相关论坛提问,均未得到有效解答,仅需明确登录后请求触发登出的原因。

测试脚本

Selenium脚本

from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 定义URL
url = 'https://www.oddsportal.com/login/'
username = 'chuky'
password = 'A151515a'
path = r'C:\Users\Glodaris\OneDrive\Desktop\Repo\Scraper\chromedriver.exe'
webdriver_service = Service(path)
options = ChromeOptions()

browser = Chrome(service=webdriver_service, options=options)

browser.get(url)
browser.implicitly_wait(2)
browser.find_element(By.ID, 'onetrust-accept-btn-handler').click()
browser.find_element(By.ID,'login-username1').send_keys(username)
browser.find_element(By.ID,'login-password1').send_keys(password)
browser.implicitly_wait(10)
browser.find_element(By.XPATH,'//*[@id="col-content"]//button[@class="inline-btn-2"]').click()

print('successful login')
browser.implicitly_wait(10)
browser.get('https://www.oddsportal.com/results/')

Scrapy脚本

import scrapy
from scrapy.spiders import CrawlSpider
import logging

logger = logging.getLogger(__name__)

class OddsportalSpider(CrawlSpider):
    name = 'oddsportal'
    allowed_domains = ['oddsportal.com']  
    login_page = 'https://www.oddsportal.com/login/'

    def start_requests(self):
        """爬取开始前执行,尝试登录"""
        yield scrapy.Request(
            url=self.login_page,
            callback=self.login,
            dont_filter=True    
        )

    def login(self, response):
        """生成登录请求"""
        yield scrapy.FormRequest.from_response(
            response=response,
            formdata={
                'login-username': 'chuky', 
                'login-password': 'A151515a',
                'login-submit': '',
            },
            callback=self.after_login,
            dont_filter=True
        )

    def after_login(self, response):
        """验证登录结果,成功则发起/results/请求"""
        if b"Wrong username or password" in response.body:
            logger.warning("LOGIN ATTEMPT FAILED")
            return
        else:
            logger.info("LOGIN ATTEMPT SUCCESSFUL")
            url = 'https://www.oddsportal.com/results/'
            return scrapy.Request(url=url, callback=self.parse_item, dont_filter=True) 

    def parse_item(self, response):  
        print('Thissssssssss----------------------', response.url)
        from scrapy.utils.response import open_in_browser
        open_in_browser(response) 

登录成功后发起/results/请求时会被登出。Scrapy默认处理Cookie,但手动在每个请求中附带Cookie和请求头也无效,日志反馈登录成功,但后续请求触发登出。

复现步骤

  • scrapy startproject oddsportal
  • scrapy genspider -t crawl oddsportal oddsportal.com
  • 在settings.py中设置默认User-Agent:USER_AGENT = 'oddsportal_website (+http://www.yourdomain.com)'
  • 运行爬虫:scrapy crawl oddsportal

日志信息

{'BOT_NAME': 'oddsportal_website',
 'DUPEFILTER_CLASS': 'scrapy_splash.SplashAwareDupeFilter',
 'HTTPCACHE_STORAGE': 'scrapy_splash.SplashAwareFSCacheStorage',
 'NEWSPIDER_MODULE': 'oddsportal_website.spiders',
 'ROBOTSTXT_OBEY': True,
 'SPIDER_MODULES': ['oddsportal_website.spiders']}
2022-08-15 09:47:48 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.selectreactor.SelectReactor
2022-08-15 09:47:48 [scrapy.extensions.telnet] INFO: Telnet Password: 66aa39ca3b133f3d
2022-08-15 09:47:48 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.corestats.CoreStats',
 'scrapy.extensions.telnet.TelnetConsole',
 'scrapy.extensions.logstats.LogStats']
2022-08-15 09:47:48 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware',
 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
 'oddsportal_website.middlewares.UserAgentRotatorMiddleware',
 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
 'scrapy.downloadermiddlewares.retry.RetryMiddleware',
 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
 'scrapy_splash.SplashCookiesMiddleware',
 'scrapy_splash.SplashMiddleware',
 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
 'scrapy.downloadermiddlewares.stats.DownloaderStats']
2022-08-15 09:47:48 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
 'scrapy_splash.SplashDeduplicateArgsMiddleware']
{'log_count/DEBUG': 9,
 'log_count/INFO': 11,
 'request_depth_max': 2,
 'response_received_count': 4,
 'robotstxt/request_count': 1,
 'robotstxt/response_count': 1,
 'robotstxt/response_status_count/200': 1,
 'scheduler/dequeued': 3,
 'scheduler/dequeued/memory': 3,
 'scheduler/enqueued': 3,
 'scheduler/enqueued/memory': 3,
 'start_time': datetime.datetime(2022, 8, 15, 8, 47, 48, 449490)}

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 13:39:40