当spider关闭时如何退出selenium驱动程序

2024-05-13 23:36:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个spider,我必须使用Selenium在页面上获取动态数据。下面是它的样子:

class MySpider(
    name = 'myspider'
    start_urls = ['http://example.org']

    def __init__(self, *args, **kwargs):
        super(, self).__init__(*args, **kwargs)
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(5)
        dispatcher.connect(self.spider_closed, signals.spider_closed)

    def spider_closed(self, spider):
        if self.driver:
            self.driver.quit()
            self.driver = None

这里的问题是,当我在Scrapyd中取消作业时,它直到我手动关闭窗口才会停止。显然,当我将spider部署到实际服务器上时,我无法做到这一点。在

以下是我每次点击“取消”时在Scrapyd日志中看到的:

^{pr2}$

但作业仍在作业列表中,并标记为“正在运行”。那我怎么才能关闭驱动程序呢?在


Tags: selfinitdefdriverselenium作业args页面
2条回答

你有没有试过在蜘蛛上实现from-crawler?我只在管道和扩展上做过这些,但是对于蜘蛛来说应该是一样的。。在

@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
    o = cls(*args, **kwargs)
    crawler.signals.connect(o.spider_closed, signal=signals.spider_closed)
    return o

http://doc.scrapy.org/en/latest/topics/spiders.html#scrapy.spiders.Spider.from_crawler

导入SignalManager

from scrapy.signalmanager import SignalManager

然后更换:

^{pr2}$

有:

SignalManager(dispatcher.Any).connect(self.spider_closed, signal=signals.spider_closed)

相关问题 更多 >