в scrapy, process_request из custommiddleware (selenium) в middleware.py не работал должным образом - PullRequest
0 голосов
/ 14 июля 2020

какое-то время Мой код не мог загружать изображения. Но выясняю причину неисправности. Когда я стираю "process_request" Seleniummiddleware в middlewares.py, я наконец могу загружать изображения. Но мне все еще нужно использовать селен, поэтому я хочу знать, что не так с методом process_request.

вот seleniummiddleware.

class SeleniumMiddleware(object):
    @classmethod    # must be written!
    def from_crawler(cls, crawler):
        middleware = cls()
        crawler.signals.connect(middleware.spider_opened, signals.spider_opened)
        crawler.signals.connect(middleware.spider_closed, signals.spider_closed)
        return middleware

    def spider_opened(self, spider):
        CHROMEDRIVER_PATH = './scraper/spiders/chromedriver'

        chrome_options = Options()
        chrome_options.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36")
        browser = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, chrome_options=chrome_options)
        self.driver = browser

    def spider_closed(self, spider):
        # pass
        self.driver.close()

    def process_request(self, request, spider):
        # self.driver.get('https://www.google.com')    # make some cookies
        # self.driver.get('https://www.google.com/search?q=matchesfashion') # make some cookies
        self.driver.get(request.url)
        WebDriverWait(self.driver, 10).until(lambda driver: driver.execute_script('return document.readyState') == 'complete')  # delay until driver receive everything
        body = to_bytes(text=self.driver.page_source)

        return HtmlResponse(url=request.url, body=body, encoding='utf-8', request=request)

    def process_response(self, request, response, spider):
        return response

какую часть я должен исправить или добавить для загрузки изображений ???

...