Вы хотели бы использовать диктовку meta
для передачи всех ссылок на обратный вызов, который затем выполнял бы действие, когда список пуст:
def thing_one():
boxes = sel.xpath("//div[@class='lister-item mode-advanced']")
box_urls = []
for box in boxes:
link = box.xpath(".//div[@class='lister-item-image float-left']/a/@href").extract_first()
absolute_url = response.urljoin(link)
box_urls.append(absolute_url)
# use the first one to get started
box0 = box_urls.pop()
yield SeleniumRequest(url=box0, callback=self.parse_example,
meta={'box_urls': box_urls})
def parse_example(self, response):
box_urls = response.meta.get('box_urls')
if not box_urls:
self.log('I have seen them all, now time for action!')
box = box_urls.pop()
yield SeleniumRequest(url=box, callback=self.parse_example,
meta={'box_urls': box_urls})
Это имеет неприятный побочный эффект заставляет их выполняться последовательно, но имеет приятный побочный эффект: не требуется никакой внешней системы координации, такой как база данных или хуже