Как в Scrapy установить cookie для всех запросов в расписании? - PullRequest
0 голосов
/ 11 февраля 2019

Я передаю файлы cookie из своего промежуточного программного обеспечения для загрузки.Я вижу, что банка обновлена.Но все существующие запросы выполняются без файлов 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.

...