page - selenio python haz clic en el botón
selenium webdriver click (4)
El siguiente proceso de depuración me ayudó a resolver un problema similar.
with open("output_init.txt", "w") as text_file:
text_file.write(driver.page_source.encode(''ascii'',''ignore''))
xpath1 = "the xpath of the link you want to click on"
destination_page_link = driver.find_element_by_xpath(xpath1)
destination_page_link.click()
with open("output_dest.txt", "w") as text_file:
text_file.write(driver.page_source.encode(''ascii'',''ignore''))
Debería tener dos archivos de texto con la página inicial en la que estaba (''output_init.txt'') y la página a la que lo reenvió después de hacer clic en el botón (''output_dest.txt''). Si son lo mismo, entonces sí, tu código no funcionó. Si no lo son, entonces tu código funcionó, pero tienes otro problema. El problema para mí parecía ser que el javascript necesario que transformaba el contenido para producir mi gancho aún no se había ejecutado.
Tus opciones como yo lo veo:
- Haga que el controlador ejecute el javascript y luego llame a su código de elemento de búsqueda. Busque respuestas más detalladas sobre esto en stackoverflow, ya que no seguí este enfoque.
- Solo encuentre un gancho comparable en ''output_dest.txt'' que producirá el mismo resultado, que es lo que hice.
- Intente esperar un poco antes de hacer clic en cualquier cosa:
xpath2 = "tu xpath en el que vas a hacer clic"
WebDriverWait (driver, timeout = 5) .until (lambda x: x.find_element_by_xpath (xpath2))
El enfoque xpath no es necesariamente mejor, solo lo prefiero, también puedes utilizar tu enfoque selector.
Soy bastante nuevo en el selenio python y estoy tratando de hacer clic en un botón que tiene la siguiente estructura html:
<div class="b_div">
<div class="button c_button s_button" onclick="submitForm(''mTF'')">
<input class="very_small" type="button"></input>
<div class="s_image"></div>
<span>
Search
</span>
</div>
<div class="button c_button s_button" onclick="submitForm(''rMTF'')" style="margin-bottom: 30px;">
<input class="v_small" type="button"></input>
<span>
Reset
</span>
</div>
</div>
Me gustaría poder hacer clic en los botones Search
y Reset
arriba (obviamente, de forma individual).
He intentado un par de cosas, por ejemplo:
driver.find_element_by_css_selector(''.button .c_button .s_button'').click()
o,
driver.find_element_by_name(''s_image'').click()
o,
driver.find_element_by_class_name(''s_image'').click()
pero, parece que siempre termino con NoSuchElementException
, por ejemplo:
selenium.common.exceptions.NoSuchElementException: Message: u''Unable to locate element: {"method":"name","selector":"s_image"}'' ;
Me pregunto si de alguna manera puedo usar los atributos onclick del HTML para hacer clic con selenio.
Cualquier pensamiento que pueda apuntarme en la dirección correcta sería genial. Gracias.
Eliminar el espacio entre las clases en el selector css:
driver.find_element_by_css_selector(''.button .c_button .s_button'').click()
# ^ ^
=>
driver.find_element_by_css_selector(''.button.c_button.s_button'').click()
Tuve el mismo problema al usar Phantomjs como navegador, así que lo resolví de la siguiente manera:
driver.find_element_by_css_selector(''div.button.c_button.s_button'').click()
Esencialmente he agregado el nombre de la etiqueta DIV en la cita.
prueba esto:
descarga firefox, agrega el plugin "firebug" y "firepath"; después de instalarlos vaya a su página web, inicie Firebug y encuentre el xpath del elemento, único en la página para que no pueda cometer ningún error.
browser.find_element_by_xpath (''solo copia y pega el Xpath''). click ()