Selenio: recupera los datos que se cargan mientras se desplaza hacia abajo

Estoy tratando de recuperar elementos en una página que tiene una funcionalidad de ajax-load scroll-down en Twitter. Por alguna razón esto no está funcionando correctamente. Agregué algunas declaraciones de impresión para depurarlo y siempre obtengo la misma cantidad de elementos y luego la función devuelve. ¿Qué estoy haciendo mal aquí?

wd = webdriver.Firefox() wd.implicitly_wait(3) def get_items(items): print len(items) wd.execute_script("window.scrollTo(0, document.body.scrollHeight);") # len(items) and len(wd.find_elements-by...()) both always seem to return the same number # if I were to start the loop with while True: it would work, but of course... never end while len(wd.find_elements_by_class_name('stream-item')) > len(items): items = wd.find_elements_by_class_name('stream-item') print items wd.execute_script("window.scrollTo(0, document.body.scrollHeight);") return items def test(): get_page('http://twitter.com/') get_items(wd.find_elements_by_class_name('stream-item')) 

Intenta poner un sueño en medio

 wd = webdriver.Firefox() wd.implicitly_wait(3) def get_items(items): print len(items) wd.execute_script("window.scrollTo(0, document.body.scrollHeight);") # len(items) and len(wd.find_elements-by...()) both always seem to return the same number # if I were to start the loop with while True: it would work, but of course... never end sleep(5) #seconds while len(wd.find_elements_by_class_name('stream-item')) > len(items): items = wd.find_elements_by_class_name('stream-item') print items wd.execute_script("window.scrollTo(0, document.body.scrollHeight);") return items def test(): get_page('http://twitter.com/') get_items(wd.find_elements_by_class_name('stream-item')) 

Nota: el sueño duro es solo para demostrar que funciona. Por favor use el paquete de espera para esperar una condición inteligente.

La condición en el bucle while fue el problema para mi caso de uso. Era un bucle infinito. Arreglé el problema usando un contador:

 def get_items(items): item_nb = [0, 1] # initializing a counter of number of items found in page while(item_nb[-1] > item_nb[-2]): # exiting the loop when no more new items can be found in the page items = wd.find_elements_by_class_name('stream-item') time.sleep(5) browser.execute_script("window.scrollTo(0, document.body.scrollHeight);") item_nb.append(len(items)) return items 

“ `