¿Cómo accedo y hago clic en un botón que tiene un hipervínculo a una función de javascript?
elemento HTML:
<a href="javascript:Nav('-index=')" id="ctl04_ctl25_ctl00_lnk2NextPg" class="twPagerBtn right" role="button" onclick="mySpud.container.scrollIntoView();" title="Next Page" aria-label="Next Page">►</a>Mi código actual:
next_button='//*[@id="ctl04_ctl06_ctl00_lnk2NextPg"]' try: element=WebDriverWait(driver,15).until( EC.presence_of_element_located((By.XPATH,next_button)) ) element.click() except: driver.quit()Selenium no puede encontrar el elemento y también he intentado usar la función find_element() usando varios métodos (por id, etc.) sin éxito.
El localizador //*[@id="ctl04_ctl06_ctl00_lnk2NextPg"] no parece ser estático.
Prueba esto:
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//*[@aria-label='Next Page']"))).click()Si esto no funciona, entonces puedes probar esto:
element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a[@aria-label='Next Page']"))) driver.execute_script("arguments[0].click();", element)Localizador alternativo:
Puede usar //*[@title= 'Next Page'] en lugar de @aria-label locator Localizador alternativo:
Tienes que cuidar un par de cosas aquí:
La parte inicial del valor del atributo id es dinámica como en ctl04_ctl25_ctl00_lnk2NextPg y cambiará cada vez que acceda a la página de nuevo. Así que tienes que construir una estrategia de localización dinámica
Avanzando a medida que invoca click() , en lugar de present_of_element_located( presence_of_element_located() debe inducir WebDriverWait para element_to_be_clickable() y puede usar cualquiera de las siguientes estrategias de localización :
Usando CSS_SELECTOR :
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[id$='NextPg'][title='Next Page'][aria-label='Next Page']"))).click() Usando XPATH :
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(@id, 'NextPg')][@title='Next Page' and @aria-label='Next Page']"))).click()Simplemente llame a la función directamente:
driver.execute_script("Nav('-index=')")