Cómo encontrar elementos por texto con selenio

How Find Element Text With Selenium



Localizar y seleccionar elementos de la página web es la clave para el web scraping con Selenium. Puede seleccionar elementos usando un nombre de etiqueta, ID, nombre de clase, selector XPath, selector CSS, etc. en Selenium. También puede seleccionar elementos que tengan un texto específico con Selenium. Esto es útil para seleccionar enlaces y botones de la página web fácilmente. Incluso si la estructura de la página cambia, siempre que el texto del elemento de la página web siga siendo el mismo, su selector debería funcionar bien. Esta es la ventaja de seleccionar enlaces y botones usando texto en Selenium.

En este artículo, le mostraré cómo ubicar y seleccionar elementos de páginas web usando texto en Selenium con la biblioteca de Selenium python. Entonces empecemos.







Requisitos previos:

Para probar los comandos y ejemplos de este artículo, debe tener:



  1. Una distribución de Linux (preferiblemente Ubuntu) instalada en su computadora.
  2. Python 3 instalado en su computadora.
  3. PIP 3 instalado en su computadora.
  4. Pitón virtualenv paquete instalado en su computadora.
  5. Los navegadores web Mozilla Firefox o Google Chrome instalados en su computadora.
  6. Debe saber cómo instalar el controlador Firefox Gecko o el controlador web de Chrome.

Para cumplir con los requisitos 4, 5 y 6, lea mi artículo Introducción al selenio en Python 3 .



Puede encontrar muchos artículos sobre otros temas en LinuxHint.com . Asegúrese de revisarlos si necesita ayuda.





Configuración de un directorio de proyectos:

Para mantener todo organizado, cree un nuevo directorio de proyectos selenium-text-select / como sigue:

$mkdir -pvselenium-text-select/conductores



Navega al selenium-text-select / directorio del proyecto de la siguiente manera:

$cdselenium-text-select/

Cree un entorno virtual de Python en el directorio del proyecto de la siguiente manera:

$virtualenv .venv

Active el entorno virtual de la siguiente manera:

$fuente.venv/soy/activar

Instale la biblioteca Selenium Python usando PIP3 de la siguiente manera:

$ pip3 instalar selenium

Descargue e instale todos los controladores web necesarios en el conductores / directorio del proyecto. He explicado el proceso de descarga e instalación de controladores web en mi artículo. Introducción al selenio en Python 3 .

Encontrar elementos por texto:

En esta sección, le mostraré algunos ejemplos de cómo encontrar y seleccionar elementos de página web por texto con la biblioteca Selenium Python.

Comenzaré con el ejemplo más simple de seleccionar elementos de una página web por texto, seleccionando enlaces de la página web.

En la página de inicio de sesión de facebook.com, tenemos un enlace Cuenta olvidada? Como puede ver en la captura de pantalla a continuación. Seleccionemos este enlace con Selenium.

Crea una nueva secuencia de comandos de Python ex01.py y escriba las siguientes líneas de códigos.

deselenioimportarwebdriver
deselenio.webdriver.común.teclas importarTeclas
deselenio.webdriver.común.por importarPor
de tiempo importardormir
navegador=webdriver.Cromo(ruta_ejecutable='./controladores/chromedriver')
navegador.obtener('https://www.facebook.com/')
olvidadoCuentaLink=navegador.find_element(Por.XPATH, '
// * [text () = '¿Cuenta olvidada?'] '
)
OlvidéAccountLink.send_keys(Teclas.INGRESAR)

Una vez que haya terminado, guarde el ex01.py Secuencia de comandos de Python.

La línea 1-4 importa todos los componentes necesarios al programa Python.

Line 6 crea un Chrome navegador objeto usando el conductor cromado binario del conductores / directorio del proyecto.

La línea 8 le dice al navegador que cargue el sitio web facebook.com.

La línea 10 encuentra el enlace que tiene el texto. Cuenta olvidada? Utilizando el selector XPath. Para eso, he usado el selector XPath // * [text () = ’¿Cuenta olvidada?’] .

El selector XPath comienza con //, lo que significa que el elemento puede estar en cualquier lugar de la página. los * El símbolo le dice a Selenium que seleccione cualquier etiqueta ( a o pag o lapso, etc.) que coincida con la condición dentro de los corchetes [] . Aquí, la condición es que el texto del elemento sea igual al Cuenta olvidada?

los texto() La función XPath se usa para obtener el texto de un elemento.

Por ejemplo, texto() devoluciones Hola Mundo si selecciona el siguiente elemento HTML.

< a href='http://dummysite.com'>Hola Mundo</ a >

La línea 11 envía el presione la tecla para Cuenta olvidada? Enlace.

Ejecute la secuencia de comandos de Python ex01.py con el siguiente comando:

$ python ex01.py

Como puede ver, el navegador web busca, selecciona y presiona el clave en el Cuenta olvidada? Enlace.

los Cuenta olvidada? El enlace lleva al navegador a la siguiente página.

De la misma manera, puede buscar fácilmente elementos que tengan su valor de atributo deseado.

Aquí el Iniciar sesión el botón es un aporte elemento que tiene el valor atributo Iniciar sesión . Veamos cómo seleccionar este elemento por texto.

Crea una nueva secuencia de comandos de Python ex02.py y escriba las siguientes líneas de códigos.

deselenioimportarwebdriver
deselenio.webdriver.común.teclas importarTeclas
deselenio.webdriver.común.por importarPor
de tiempo importardormir
navegador=webdriver.Cromo(ruta_ejecutable='./controladores/chromedriver')
navegador.obtener('https://www.facebook.com/')
dormir(5)
emailInput=navegador.find_element(Por.XPATH, '// input [@ id =' email ']')
passwordInput=navegador.find_element(Por.XPATH, '// input [@ id =' pass ']')
loginButton=navegador.find_element(Por.XPATH, '// * [@ value =' Iniciar sesión ']')
emailInput.send_keys('[correo electrónico protegido]')
dormir(5)
passwordInput.send_keys('pase secreto')
dormir(5)
loginButton.send_keys(Teclas.INGRESAR)

Una vez que haya terminado, guarde el ex02.py Secuencia de comandos de Python.

La línea 1-4 importa todos los componentes necesarios.

Line 6 crea un Chrome navegador objeto usando el conductor cromado binario del conductores / directorio del proyecto.

La línea 8 le dice al navegador que cargue el sitio web facebook.com.

Todo sucede tan rápido una vez que ejecuta el script. Entonces, he usado el dormir() Funcionar muchas veces en ex02.py para retrasar los comandos del navegador. De esta forma, puedes observar cómo funciona todo.

La línea 11 busca el cuadro de texto de entrada de correo electrónico y almacena una referencia del elemento en el emailInput variable.

La línea 12 busca el cuadro de texto de entrada de correo electrónico y almacena una referencia del elemento en el emailInput variable.

La línea 13 busca el elemento de entrada que tiene el atributo valor de Iniciar sesión utilizando el selector XPath. Para eso, he usado el selector XPath // * [@ value = ’Iniciar sesión’] .

El selector XPath comienza con // . Significa que el elemento puede estar en cualquier lugar de la página. los * El símbolo le dice a Selenium que seleccione cualquier etiqueta ( aporte o pag o lapso, etc.) que coincida con la condición dentro de los corchetes [] . Aquí, la condición es el atributo del elemento. valor es igual a Iniciar sesión .

La línea 15 envía la entrada[correo electrónico protegido]al cuadro de texto de entrada de correo electrónico, y la línea 16 retrasa la siguiente operación.

La línea 18 envía el paso secreto de entrada al cuadro de texto de entrada de contraseña, y la línea 19 retrasa la siguiente operación.

La línea 21 envía el presione la tecla hasta el botón de inicio de sesión.

Ejecutar el ex02.py Script de Python con el siguiente comando:

$ python3 ex02.py

Como puede ver, los cuadros de texto de correo electrónico y contraseña están llenos de nuestros valores ficticios, y el Iniciar sesión se presiona el botón.

Luego, la página navega a la página siguiente.

Encontrar elementos por texto parcial:

En la sección anterior, le he mostrado cómo encontrar elementos por texto específico. En esta sección, le mostraré cómo encontrar elementos de páginas web usando texto parcial.

En el ejemplo, ex01.py , He buscado el elemento de enlace que tiene el texto Cuenta olvidada? . Puede buscar el mismo elemento de enlace utilizando texto parcial como Acc olvidado . Para hacer eso, puede usar el contiene () Función XPath, como se muestra en la línea 10 de ex03.py . El resto de los códigos son los mismos que en ex01.py . Los resultados serán los mismos.

En la línea 10 de ex03.py , la condición de selección utilizó el contiene (fuente, texto) Función XPath. Esta función toma 2 argumentos, fuente, y texto .

los contiene () La función comprueba si el texto dado en el segundo argumento coincide parcialmente con el fuente valor en el primer argumento.

La fuente puede ser el texto del elemento ( texto() ) o el valor de atributo del elemento ( @attr_name ).

En ex03.py , se comprueba el texto del elemento.

Otra función XPath útil para buscar elementos de la página web usando texto parcial es empieza con (fuente, texto) . Esta función tiene los mismos argumentos que la contiene () función y se utiliza de la misma manera. La única diferencia es que el comienza con() la función comprueba si el segundo argumento texto es la cadena inicial del primer argumento fuente .

He reescrito el ejemplo ex03.py para buscar el elemento para el que el texto comienza con Olvidado, como puede ver en la línea 10 de ex04.py . El resultado es el mismo que en ex02 y ex03.py .

Yo tambien he reescrito ex02.py para que busque el elemento de entrada para el que el valor el atributo comienza con Tronco, como puede ver en la línea 13 de ex05.py . El resultado es el mismo que en ex02.py .

Conclusión:

En este artículo, le he mostrado cómo buscar y seleccionar elementos de páginas web por texto con la biblioteca Selenium Python. Ahora, debería poder encontrar elementos de páginas web por texto específico o texto parcial con la biblioteca Selenium Python.