Python / Selenium Stale Element Referencia en el bucle -- python campo con loops campo con selenium campo con selenium-chromedriver campo con staleelementreferenceexception camp Relacionados El problema

Python/Selenium Stale Element Reference in For Loop


2
vote

problema

Español

Estoy teniendo problemas en bucle a través de una lista de identificación de la empresa y usándolos en una barra de búsqueda. Mi código funciona bien cuando el archivo de texto contiene solo una ID, pero cuando agrego una segunda identificación a la lista, ni siquiera realizará el último clic para la primera identificación, y mucho menos la búsqueda de la segunda, y luego me da Una excepción de referencia de elementos rancios. Esto me está volviendo loco, así que cualquier ayuda sería increíble. No tengo mucha experiencia en absoluto, así que soporte conmigo si no entiendo una solicitud de más información o su solución.

Código:

  company_list = open('Company_List.txt') for line in company_list:   company_id = driver.find_element_by_xpath('//*[@id="SearchTopBar"]')   company_id.send_keys(line)   company_id.send_keys(Keys.ENTER)   driver.implicitly_wait(10)   driver.find_element_by_xpath('//*[@id="CompanyHeaderInfo_TearSheetReport_ReportImage"]/div/img').click()   driver.implicitly_wait(10)   

Corrector:

  U0  
Original en ingles

I'm having trouble looping through a list of company ID's and using them in a search bar. My code works just fine when the text file contains just one ID, but when I add a second ID to the list it won't even perform the last click for the first ID, let alone search for the second one, and then gives me a stale element reference exception. This is driving me insane so any help would be amazing. I'm not very experienced at all so bear with me if I don't understand a request for more information or your solution.

Code:

company_list = open('Company_List.txt') for line in company_list:   company_id = driver.find_element_by_xpath('//*[@id="SearchTopBar"]')   company_id.send_keys(line)   company_id.send_keys(Keys.ENTER)   driver.implicitly_wait(10)   driver.find_element_by_xpath('//*[@id="CompanyHeaderInfo_TearSheetReport_ReportImage"]/div/img').click()   driver.implicitly_wait(10) 

Traceback:

File "<ipython-input-5-3766dfd38c2f>", line 1, in <module> runfile('C:/Users/kdixon/Desktop/Business_Intelligence/PROJECTS/Scripts/Pull Tearsheets.py', wdir='C:/Users/kdixon/Desktop/Business_Intelligence/PROJECTS/Scripts')  File "C:UserskdixonAppDataLocalContinuumanaconda3libsite-packagesspyderutilssitesitecustomize.py", line 705, in runfile execfile(filename, namespace)  File "C:UserskdixonAppDataLocalContinuumanaconda3libsite-packagesspyderutilssitesitecustomize.py", line 102, in execfile exec(compile(f.read(), filename, 'exec'), namespace)  File "C:/Users/kdixon/Desktop/Business_Intelligence/PROJECTS/Scripts/Pull Tearsheets.py", line 42, in <module> company_id.send_keys(Keys.ENTER)  File "C:UserskdixonAppDataLocalContinuumanaconda3libsite-packagesseleniumwebdriver emotewebelement.py", line 479, in send_keys 'value': keys_to_typing(value)})  File "C:UserskdixonAppDataLocalContinuumanaconda3libsite-packagesseleniumwebdriver emotewebelement.py", line 628, in _execute return self._parent.execute(command, params)  File "C:UserskdixonAppDataLocalContinuumanaconda3libsite-packagesseleniumwebdriver emotewebdriver.py", line 314, in execute self.error_handler.check_response(response)  File "C:UserskdixonAppDataLocalContinuumanaconda3libsite-packagesseleniumwebdriver emoteerrorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace)  StaleElementReferenceException: stale element reference: element is not attached to the page document  (Session info: chrome=67.0.3396.99) (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 10.0.16299 x86_64) 
</div
              

Lista de respuestas

0
 
vote
vote
La mejor respuesta
 

De acuerdo con el rastreo, en particular el hecho de que la excepción se lanza desde la línea import *1111111 y el tipo de excepción, parece que el cuadro de búsqueda (con id import *2 )) se reemplaza con otro elemento cuando comienza a escribir.

Supongo que si envía la entrada, presione juntos con el valor, resolverá el problema. I.e.:

  import *3  

En caso de que no lo haga, abra las herramientas del desarrollador en el navegador y vea qué elemento reemplaza el elemento from platform import node settings_files = { 'BMH.lan': 'settings_bmh.py", ... } __import__( settings_files[ node() ] ) 14 cuando comienza a escribir. En el código, después de enviar el elemento import *5 al elemento from platform import node settings_files = { 'BMH.lan': 'settings_bmh.py", ... } __import__( settings_files[ node() ] ) 1661666166666666666666. Búsqueda del elemento que encontraste para reemplazarlo y enviar la tecla Entrar a ese elemento en lugar de a el import *7 .

 

According to the traceback, particularly the fact that the exception is thrown from the line company_id.send_keys(Keys.ENTER) and the type of the exception, it appears that the search box (with id SearchTopBar) is replaced with another element when you start typing.

I guess that if you'll send the Enter press together with the value, it will solve the problem. I.e.:

company_id.send_keys(line + Keys.ENTER) 

In case it doesn't, open the Developer Tools in the browser and see which element replaces the SearchTopBar element when you start typing. In the code, after sending the line keystrokes to the company_id element, search for the element that you found to replaces it, and send the Enter keypress to that element instead of to the company_id.

</div
 
 
 
 
0
 
vote

Intenta esto:

  import *8  

Esperará hasta que el elemento esté presente en DOM

Código completo:

  import *9  
 

Try this:

from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait  company_id = WebDriverWait(driver, 10).until(     EC.presence_of_element_located((By.XPATH, "//*[@id='SearchTopBar']")) ) 

it will wait until element will be present in DOM

Full code:

from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait  company_list = open('Company_List.txt') for line in company_list:   company_id = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//*[@id='SearchTopBar']")))   company_id.send_keys(line)   company_id.send_keys(Keys.ENTER)   driver.implicitly_wait(10)   driver.find_element_by_xpath('//*[@id="CompanyHeaderInfo_TearSheetReport_ReportImage"]/div/img').click()   driver.implicitly_wait(10) 
</div
 
 
       
       

Relacionados problema

-1  Obtención de error "Mensaje: Referencia de elementos rancios: El elemento no se adjunta al documento de la página". ¿Qué estoy haciendo mal?  ( Getting error message stale element reference element is not attached to the ) 
connections=driver.find_elements_by_css_selector("a span[class='mn-connection-card__name t-16 t-black t-bold']") print(len(connections)) for connecti...

4  ¿Cómo seleccionar una opción de un desplegamiento dinámico usando Selenium?  ( How to select an option from a dynamic dropdown using selenium ) 
Estoy tratando de hacer clic en el valor desplegable para seleccionar CIUDAD IN from Field en Hacer mi viaje http: // www. makemytrip.com/ . Pero conseguir l...

11  Excepción de StaleelementReference en páginas  ( Staleelementreference exception in pagefactory ) 
Estoy tratando de aprender el modelo de páginas. Entendí el hecho de que cuando hacemos un initElements , los WebElements se encuentra. Digamos por ejemplo, ...

2  Manejar StaleelementreferenceException mientras usa páginas [duplicado]  ( Handle staleelementreferenceexception while using pagefactory ) 
Esta pregunta ya tiene respuestas aquí : Excepción de StaleelementReference en PáginaFactory ...

0  Error de excepción obsoleta mientras navega por el bucle  ( Stale exception error while browsing through for loop ) 
from selenium import webdriver from selenium.webdriver.support.ui import Select import time path_to_chromedriver = 'C:/Users/WIN7/AppData/Local/Programs/Pyth...

0  Python Selenium EXCUTUT_SIPT ("VENTANA DE RETURNO.DATALAYER") DEVOLVER REFERENCIA ESTACIONAL? ¿Qué pasa? Todo esta todavia  ( Python selenium execute scriptreturn window datalayer returns stale referenc ) 
Puedo ver execute_script() Ejecutar muchas veces en la página única enrutada de AngularJS en la que estoy probando, ya que parece que un montón de código ut...

2  Python / Selenium Stale Element Referencia en el bucle  ( Python selenium stale element reference in for loop ) 
Estoy teniendo problemas en bucle a través de una lista de identificación de la empresa y usándolos en una barra de búsqueda. Mi código funciona bien cuando e...

0  ¿Cuál es la mejor manera de encontrar todos los enlaces rotos en un sitio web con Selenium y Java sin obtener una excepción de StaleElementreferenceException?  ( What is the best way to find all broken links on a website with selenium and jav ) 
Estoy tratando de encontrar todos los enlaces rotos en una página web con Selenium para Java. Lo intenté con un simple tutorial y parece que funciona en sitio...

0  StalleelementreferenceException Cuando intento hacer clic en "N OTROS" en "A GUSTADO POR OTROS Y N OTROS" de un post de Instagram, usando Selenium y Python  ( Staleelementreferenceexception when i try to click the n others in liked by s ) 
Entonces, como usted sabe, cuando abre una publicación en Instagram en Desktop, se mostrará "A GUSTADO POR UNA ALGUIEN Y 400". Estoy tratando de hacer clic en...

0  Selenium Web raspando con botón "Siguiente" haciendo clic en los resultados de duplicados  ( Selenium web scraping with next button clicking results in duplicate values ) 
Estoy usando SELENIUM y BeautifulSoup para raspar datos de un sitio web ( http: //www.grownjkids .gov / padresFamilias / Providersearch ) con un botón siguien...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos