Estoy raspando un pequeño sitio en el que me encanta enviar_Keys a un cuadro de texto, luego haga clic en el botón de búsqueda, la página carga algunos resultados, verifico para presencial_of_element y finalmente obtengo texto de esos resultados. Pero el problema es cuando el sitio ya tiene algunos resultados presentes en la página, por lo que cuando se hace clic en el bucle para la búsqueda y se hace clic en el botón de búsqueda, la página toma algunas segundas para cargar los nuevos resultados, pero el script continúa y El selenio vea la presencia de resultados iniciales y los captura nuevamente y el bucle continúa con el mismo resultado. Intenté agregar tiempo.Sleep, pero aún se encuentra en algunos problemas. A continuación se muestra el flujo de trabajo y el código.

URL Opens
Result 0 already present on page
Change Dropdown
Loop starts>>
Text sent to searchBox >> Search button Clicked
Result 0 still present on Site
Page is loading >> But Selenium sees presence of Result0 and gets text
Loop continues to send new key and click search button
Page is still loading with Result 1>> selenium again checks presence and this continues.

self.driver.get(self.url)
self.waitForPresenceOfElement(locator=self.radius_drop_down, locatorType='id')
self.dropByType(data='100', locator=self.radius_drop_down, locatorType='id', type='value')
time.sleep(6)
for state in self.states:
    self.sendKeysWhenReady(data=state, locator=self.search_box, locatorType='id')
    time.sleep(1)
    self.elementClick(locator=self.search_button, locatorType='xpath')
    time.sleep(3)
    if self.getElementList(self.storesXpath, locatorType='xpath'):  # to ignore Empty states
        stores = self.waitForPresenceOfAllElements(locator=self.storesXpath, locatorType='xpath')
        for store in stores:  
            self.full_list.append(self.getText(element=store).lower())
0
Ronron 25 may. 2021 a las 17:13

1 respuesta

La mejor respuesta

La forma en que arreglas esto es:

  1. Comience su bucle.

  2. Encuentre un resultado de búsqueda existente en la página y obtenga una referencia a ella.

    result = driver.find_element(...)
    
  3. Envíe los términos de búsqueda y haga clic en Buscar.

  4. Espere a que la referencia result se establezca, que le indique que la página está recaudando.

     wait = WebDriverWait(driver, 10)
     wait.until(EC.staleness_of(result))
    
  5. Espere a que los resultados sean visibles y continúe el bucle.

1
JeffC 25 may. 2021 a las 15:08