Python Selenium:等到类可见

时间:2016-12-09 10:56:00

标签: javascript python selenium automated-tests

我试图从具有不同网页的网站获取数据。

我的代码如下所示:

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无法抓住我正在寻找的课程。我已经尝试了一些等待功能,但到目前为止我还没有成功。真的很感激帮助!

提前致谢!

1 个答案:

答案 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