Я читал о StaleElementReferenceException в официальной документации, но я все еще не понимаю, почему мой код вызывает это исключение? browser.get()
создает новый паук?
class IndiegogoSpider(CrawlSpider):
name = 'indiegogo'
allowed_domains = [ 'indiegogo.com' ]
start_urls = [ 'https://www.indiegogo.com/explore/all?project_type=all&project_timing=all&sort=trending' ]
def parse(self, response):
if (response.status != 404):
options = Options()
options.add_argument('-headless')
browser = webdriver.Firefox(firefox_options=options)
browser.get(self.start_urls[0])
show_more = WebDriverWait(browser, 10).until(
EC.element_to_be_clickable((By.XPATH, '//div[@class="text-center"]/a'))
)
while True:
try:
show_more.click()
except Exception:
break
hrefs = WebDriverWait(browser, 60).until(
EC.visibility_of_all_elements_located((By.XPATH, '//div[@class="discoverableCard"]/a'))
)
for href in hrefs:
browser.get(href.get_attribute('href'))
#
# will be scraping individual pages here
#
browser.close()
Я пробовал следующее безрезультатно. Я также попытался поместить переменную links
в другое место скрипта, в другой области, также безрезультатно.
links = []
for href in hrefs:
links.append(href.get_attribute('href'))
for link in links:
browser.get(href.get_attribute('href'))
#
# will be scraping individual pages here
#
Не знаете, почему hrefs
и особенно links
стираются из памяти? Когда я извлекаю значение атрибута href
каждого элемента в итерируемом hrefs
, а затем вставляю все URL-адреса в переменную links
, разве список links
не должен быть независимым от DOM и страницы? изменения?
Не уверен, что делать на этом этапе. Есть идеи?