在Scrapy中如何为计划中的所有请求设置cookie?

时间:2019-02-10 22:20:23

标签: cookies scrapy setcookie

我从我的下载中间件传递了cookie。我看到jar更新了。但是,所有现有请求都是在没有Cookie的情况下发出的。

class MyCookies(CookiesMiddleware):

    def get_cookies_emulate(self, url):

        return [
            {'domain': 'site.com', 'name': 'id', 'path': '/', 'value': '123456'},
            {'domain': 'site.com', 'name': 'JSESSIONID', 'path': '/', 'value': '987654321'}
        ]

    def process_request(self, request, spider):
        if request.meta.get('dont_merge_cookies', False):
            return

        cookiejarkey = request.meta.get("cookiejar")
        jar = self.jars[cookiejarkey]

        request.headers.pop('Cookie', None)
        jar.add_cookie_header(request)
        self._debug_cookie(request, spider)

    def process_response(self, request, response, spider):
        new_response = HtmlResponse(response.url, body=response.body)

        captcha_image_xpath = '//td[@width="50%" and ./img]'

        if new_response.xpath(captcha_image_xpath).extract_first():
            cookiejarkey = request.meta.get("cookiejar")
            jar = self.jars[cookiejarkey]
            print('JAR!!!', jar._cookies)
            selen_cookies = self.get_cookies_emulate(url=response.url)
            selen_cookies = [self._format_cookie(x) for x in selen_cookies]
            headers = {'Set-Cookie': selen_cookies}
            response = Response(request.url, headers=headers)
            cookies = jar.make_cookies(response, request)

            for cookie in cookies:
                jar.set_cookie(cookie)

            self._debug_set_cookie(response, spider)

            request = request.replace(dont_filter=True, priority=99999)
            return request

        return response

我看到在get_cookies_emulate函数调用之前创建的所有请求都没有收到Cookie。

0 个答案:

没有答案