我试图从具有不同网页的网站获取数据。
我的代码如下所示:
item_List = []
def scrape(pageNumber):
driver.get(url + pageExtension + str(pageNumber))
items = driver.find_elements_by_class_name("Item-information")
for item in items:
item_List.append(item.text)
return item_List
现在我能够从一个页面收集我想要的数据。 我跑的时候:
print scrape(23)
我得到了我需要的结果。但是当我跑步时:
print scrape(14) #any page number really
print scrape(23)
Selenium首先加载页面" url + pageExtension + str(14)"并成功获取数据。然后加载" url + pageExtension + str(23)"但是没有刮掉数据。我收到以下错误代码:
selenium.common.exceptions.StaleElementReferenceException: Message:
stale element reference: element is not attached to the page document
我认为这是由于浏览器没有足够快地加载第二页导致selenium无法抓住我正在寻找的课程。我已经尝试了一些等待功能,但到目前为止我还没有成功。真的很感激帮助!
提前致谢!
答案 0 :(得分:2)
尝试如下:
item_List = []
def scrape(pageNumber):
driver.get(url + pageExtension + str(pageNumber))
items = driver.find_elements_by_class_name("Item-information")
for item in items:
item_List.append(item.text)
element = WebDriverWait(driver, 10).until(
EC.staleness_of((By.CLASS_NAME, "Item-information"))) # waits till the element is NOT attached to the DOM.
return item_List
注意:当您要查找相同的元素(具有相同的类名)时,items
仍然包含对您之前访问过的元素的引用。 (这里Page 14
)。因此,当您访问Page 24
时,items
会引用Page 14
但不在Page 24
中的元素,因此会StaleElementReferenceException
。