我编写了一个脚本scrapy
,结合使用selenium
来解析CEO
网页中不同公司的名称。您可以在登录页面中找到不同公司的名称。CEO
但是,一旦您单击公司链接的名称,您就可以获得's 的名称。
以下脚本可以解析不同公司的链接,并使用这些链接来抓取CEO
除第二家公司之外的 'S 的名称。当脚本尝试解析CEO
使用第二家公司的链接的名称时,它会遇到stale element reference error
. 即使在途中遇到该错误,该脚本也会以正确的方式获取其余结果。再一次 - 它只会在使用第二个公司链接解析信息时引发错误。好奇怪!!
这是我迄今为止尝试过的:
import scrapy
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
class FortuneSpider(scrapy.Spider):
name = 'fortune'
url = 'http://fortune.com/fortune500/list/'
def start_requests(self):
self.driver = webdriver.Chrome()
self.wait = WebDriverWait(self.driver,10)
yield scrapy.Request(self.url,callback=self.get_links)
def get_links(self,response):
self.driver.get(response.url)
for item in self.wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '[class*="searchResults__title--"]'))):
company_link = item.find_element_by_css_selector('a[class*="searchResults__cellWrapper--"]').get_attribute("href")
yield scrapy.Request(company_link,callback=self.get_inner_content)
def get_inner_content(self,response):
self.driver.get(response.url)
chief_executive = self.wait.until(EC.presence_of_element_located((By.XPATH, '//tr[td[.="CEO"]]//td[contains(@class,"dataTable__value--")]/div'))).text
yield {'CEO': chief_executive}
这是我得到的结果类型:
Jeffrey P. Bezos
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
(Session info: chrome=76.0.3809.132)
Darren W. Woods
Timothy D. Cook
Warren E. Buffett
Brian S. Tyler
C. Douglas McMillon
David S. Wichmann
Randall L. Stephenson
Steven H. Collis
and so on------------
如何解决我的脚本在处理第二个公司链接时遇到的错误?
PS 我可以使用他们的 api 来获取所有信息,但我很想知道为什么上面的脚本面临这个奇怪的问题。
慕桂英546537
小唯快跑啊
沧海一幻觉
相关分类