Как использовать Selenium с Scrapy для сканирования страниц AJAX - PullRequest
0 голосов
/ 09 мая 2018

Я новичок в Scrapy, мне нужно почистить страницу, и у меня возникают проблемы при сканировании страницы, которую нужно очистить.

Не заполняя ни одно из полей на странице и не нажимая кнопку «PESQUISAR» (перевод: поиск) напрямую, мне нужно очистить все страницы, показанные ниже.

Похоже, моя проблема в javascript на странице ... и я никогда не работал с javascript.

from scrapy import Spider
from selenium import webdriver
from scrapy.selector import Selector

class CarfSpider(Spider):
    name = 'carf'
    allowed_domains = ['example.com']

    def start_requests(self):
        self.driver = webdriver.Chrome('/Users/Desktop/chromedriver')
        self.driver.get('example.com')
        sel = Selector(text=self.driver.page_source)
        carf = sel.xpath('//*[@id="botaoPesquisarCarf"]')

Моя главная сложность - отслеживание этой страницы. Поэтому, если кто-нибудь может мне помочь с этим, я ценю это.

Извините за плохой английский, надеюсь, вы поняли

1 Ответ

0 голосов
/ 09 мая 2018

Вы должны использовать драйвер, чтобы нажать на кнопку Pesquisar , вызвать WebDriverWait, чтобы дождаться появления элемента таблицы с идентификатором tblJurisprudencia , указывающего, что страница полностью загружена для получения источника-кодировать их Acordão значений со страницы.

# -*- coding: utf-8 -*-
from scrapy import Spider
from scrapy import Selector
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep


class CarfSpider(Spider):

    name = 'carf'
    start_urls = ['https://carf.fazenda.gov.br/sincon/public/pages/ConsultarJurisprudencia/consultarJurisprudenciaCarf.jsf']

    def __init__(self):
        self.driver = webdriver.Chrome(executable_path='/home/laerte/chromedriver')

    def parse(self, response):
        self.driver.get(response.url)

        self.driver.find_element_by_id('botaoPesquisarCarf').click()

        page_loaded = WebDriverWait(self.driver, 10).until(
            EC.presence_of_element_located((By.ID, "tblJurisprudencia"))
        )

        if page_loaded:
            response_selenium = Selector(text=self.driver.page_source)

            table = response_selenium.xpath("//table[@id='tblJurisprudencia']")

            for row in table.xpath("//tr"):
                body = row.xpath("//div[@class='rich-panel-body ']")

                yield {
                    "acordao" : body.xpath("./a/text()").extract_first()
                }
...