Uso de Selenium, una herramienta de prueba web automatizada

Selenio

Descripción general

Selenium es un marco de código abierto para automatizar las operaciones del navegador. Proporciona un conjunto de herramientas y bibliotecas para probar la funcionalidad y la interfaz de usuario de aplicaciones web.

Con Selenium, puede escribir scripts para simular la interacción del usuario en el navegador, como hacer clic, completar formularios, seleccionar cuadros desplegables, etc. Estos scripts se pueden ejecutar automáticamente y verificar que la aplicación se comporte como se espera.

Selenium admite una variedad de lenguajes de programación diferentes, incluidos Java, Python, C#, etc., lo que permite a los desarrolladores escribir y ejecutar scripts de prueba en un lenguaje con el que estén familiarizados.

Selenium también tiene diferentes herramientas y componentes, incluido Selenium WebDriver para interactuar directamente con los navegadores, Selenium Grid para ejecutar pruebas en paralelo en múltiples navegadores y plataformas, y proporciona una API rica y funcionalidad para manejar la búsqueda, la interacción y las afirmaciones en los elementos de la página en la navegación.

Página web oficial:https://www.selenium.dev/

Documento del sitio web oficial:https://www.selenium.dev/documentation/

Documentación china:https://python-selenium-zh.readthedocs.io/zh_CN/latest/

Insertar descripción de la imagen aquí

principio de funcionamiento

Utilice la API nativa del navegador y encapsúlela en la API Selenium WebDriver orientada a objetos (que encapsula varias funciones del navegador). El script del programa controla el navegador (Google y Microsoft) a través de la API Selenium, opera los elementos de la página del navegador u opera el propio navegador (captura de pantalla, tamaño de ventana, inicio, apagado)

Escenarios de aplicación

prueba automatizada:

Selenium es una de las herramientas de prueba automatizadas más utilizadas. Puede simular el comportamiento de interacción de usuarios reales y ejecutar automáticamente varios casos de prueba, incluidas pruebas funcionales, pruebas de regresión y pruebas de rendimiento. Con Selenium, puede probar automáticamente varias funciones de su aplicación web, verificar la corrección de la interfaz de usuario y capturar e informar problemas.

Pruebas de compatibilidad:

Con Selenium, se pueden ejecutar scripts de prueba automatizados en diferentes navegadores y sistemas operativos para verificar la compatibilidad de las aplicaciones web en diversos entornos. Esto garantiza que la aplicación se ejecute de forma coherente en todos los navegadores y plataformas.

Extracción de datos y resumen web:

Selenium se puede utilizar para rastrear contenido web y obtener los datos necesarios. Al escribir scripts, puede simular que los usuarios utilizan el navegador, acceden a páginas web y extraen datos, como comparaciones de precios, resúmenes de noticias, etc.

Llenado automatizado de formularios:

Cuando es necesario completar una gran cantidad de datos de un formulario, hacerlo manualmente puede consumir mucho tiempo y esfuerzo. Con Selenium, puede escribir scripts para completar formularios automáticamente y mejorar la eficiencia.

Pruebas de automatización de la interfaz de usuario:

Selenium puede verificar la corrección y coherencia de la interfaz de usuario. Al simular las interacciones y operaciones del usuario, se pueden probar automáticamente varios escenarios de interfaces de usuario para garantizar su corrección y funcionalidad.

Desarrollo y depuración de front-end:

Los desarrolladores pueden utilizar Selenium para depurar y verificar el código front-end. Con los scripts de prueba automatizados, puede simular las acciones del usuario y ver si la representación y la funcionalidad de la página funcionan correctamente.

Instalar el controlador del navegador

Tome el navegador Chrome como ejemplo para instalar el controlador del navegador.

Aviso:必须下载对应的 chrome 版本对应的驱动

controlador cromado:https://sites.google.com/chromium.org/driver/

controlador de cromo (antiguo):https://sites.google.com/a/chromium.org/chromedriver/

Espejo doméstico Taobao:http://npm.taobao.org/mirrors/chromedriver/

1. Determinar la versión de Chrome

Determine la versión de Chrome como: 110.0.5481.100
Insertar descripción de la imagen aquí
2. Determine la versión de ChromeDriver

1. Obtenga el número de versión de Chrome, elimine la última parte y obtenga 110.0.5481.

2. Empalme los resultados hacia https://chromedriver.storage.googleapis.com/LATEST_RELEASE_atrás.

3. Obtenga la URL: https://chromedriver.storage.googleapis.com/LATEST_RELEASE_110.0.5481y acceda al enlace para obtener el número de versión de ChromeDriver.

Insertar descripción de la imagen aquí
3. Descargue el controlador Chrome

Simplemente busque la versión correspondiente de ChromeDriver y descárguela. Dado que es el último navegador Chrome, puede encontrarlo en la página de inicio de inmediato.

Insertar descripción de la imagen aquí
Descargar diferentes ChromeDrivers según el sistema operativo
Insertar descripción de la imagen aquí
3. Configurar variables de entorno (opcional)

Después de descomprimir el paquete comprimido, obtendrá chromedriver.exeel archivo ejecutable y podrá llamar directamente al código Python.

En la variable de entorno de ruta, agregue chromedriver.exe el directorio donde se encuentra

Uso básico

Instalar el módulo de selenio

pip install selenium

punto importante

Debido a la iteración de la versión, la nueva versión de Selenium ya no usa find_element_by_idmétodos, sino que usa find_element(By.ID, '')Para más detalles, consulte la versión de Selenium.

Debido a la iteración de la versión, pueden ocurrir excepciones:AttributeError: 'WebDriver' object has no attribute 'find_element_by_id'

from selenium import webdriver
from selenium.webdriver.common.by import By

# 老版本
input_element = browser.find_element_by_id("kw")

# 新版本
input_element = browser.find_element(By.ID, 'kw')

Utilice análisis

Utilice Baidu para buscar seleniumpalabras clave automáticamente y haga clic automáticamente para saltar a un resultado de búsqueda.

Obtenga el elemento del cuadro de entrada y obtenga la información del elemento del botón de búsqueda

Insertar descripción de la imagen aquí
Obtenga la información de la dirección del primer resultado de búsqueda
Insertar descripción de la imagen aquí

Código

# 导入模块
import time

from selenium import webdriver
from selenium.webdriver.common.by import By

# 创建浏览器对象,需指定驱动。驱动有2种方式获取
# 1.通过手动指定浏览器驱动路径
browser = webdriver.Chrome('D:\Development\chromedriver_win32\chromedriver.exe')
# 2.通过$PATH环境变量寻找驱动,如果寻找不到就报错
# browser = webdriver.Chrome()

# 指定操作浏览器对象的行为
# 让浏览器访问网页
browser.get("https://www.baidu.com/")
# 获取输入框元素
# input_element = browser.find_element_by_id("kw")
input_element = browser.find_element(By.ID, 'kw')
# 输入内容
input_element.send_keys('selenium')
# 获取搜索按钮
button_element = browser.find_element(By.ID, 'su')
# 点击搜索
button_element.click()

time.sleep(3)

# 获取地址
url_element = browser.find_element(By.CLASS_NAME, "c-gap-bottom-small").find_element(By.TAG_NAME, 'a')
url_element.click()

time.sleep(5)

# 退出浏览器
browser.quit()

Métodos comunes

objeto conductor

En el proceso de uso de selenio, después de crear una instancia del objeto controlador, el objeto controlador tiene algunas propiedades y métodos de uso común.

driver.page_source 当前标签页浏览器渲染之后的网页源代码
driver.current_url 当前标签页的url
driver.close() 关闭当前标签页,如果只有一个标签页则关闭整个浏览器
driver.quit() 关闭浏览器
driver.forward() 页面前进
driver.back() 页面后退
driver.screen_shot(img_name) 页面截图

Localizar elementos de etiqueta y obtener objetos de etiqueta

Hay muchas formas de ubicar etiquetas en selenio y devolver objetos de elementos de etiqueta.

versión antigua

find_element_by_xxx 返回第一个符合条件

find_elements_by_xxx 返回符合条件所有元素的WebEelemnt列表

find_element匹配不到就抛出异常,find_elements匹配不到就返回空列表
find_element_by_id 通过ID
find_element_by_class_name 通过class查询元素
find_element_by_name 通过name
find_element_by_tag_name 通过标签名称
find_element_by_css_selector css样式选择
find_element_by_link_text 通过链接内容查找
find_element_by_partial_link_text 通过链接内容包含的内容查找,模糊查询
find_element_by_xpath 通过xpath查找数据

nueva versión

find_element(BY, 'str')

find_elements(BY, 'str')
find_element(By.ID, 'id')
find_element(By.CLASS_NAME, 'calss_name')
find_element(By.NAME, 'name')
find_element(By.TAG_NAME, 'tag_name')
find_element(By.CSS_SELECTOR, 'css_selector')
find_element(By.LINK_TEXT, 'link_text')
find_element(By.PARTIAL_LINK_TEXT, 'partial_link_text')
find_element(By.XPATH, 'xpath')

Obtener contenido de texto y valores de atributos

Obtener el valor del atributo del elemento

element.get_attribute('属性名')

Obtener contenido de texto del elemento

element.text

Ingrese datos en el cuadro de entrada

input_element.send_keys('selenium')

Realizar un clic en un elemento

button_element.click()

Utilice un navegador sin cabeza

La gran mayoría de los servidores no tienen interfaz. Selenium también controla Google Chrome en modo headless. El modo sin interfaz también se llama modo headless.

Usando el controlador pyantomjs

No se recomienda utilizar el controlador pyantomjs. Selenium ha eliminado el método pyantomjs.

enlace de descarga:http://phantomjs.org/download.html

Uso

# 导入模块
import time

from selenium import webdriver

# 创建浏览器对象
browser = webdriver.PhantomJS(executable_path=r"D:\Development\phantomjs-2.1.1-windows\bin\phantomjs.exe")

# 指定操作浏览器对象的行为
# 让浏览器访问网页
browser.get("https://www.baidu.com/")
# 保存截图调试
browser.save_screenshot('screenshot.png')

Excepción 1:

La nueva versión de Selenium ha abandonado PhantomJS, por lo que se producirán AttributeError: module 'selenium.webdriver' has no attribute 'PhantomJS'excepciones .

desinstalar selenio

pip uninstall selenium

Instale la versión especificada de selenium

pip install selenium==3.14.0

Excepción 2:

selenium.common.exceptions.WebDriverException: Message: 'phantomjs.exe' executable needs to be in PATH. 

Solución 1: agregue una r delante de la ruta completa

browser = webdriver.PhantomJS(executable_path=r"D:\Development\phantomjs-2.1.1-windows\bin\phantomjs.exe")

Solución 2: agregue la ruta al archivo bin a la variable del sistema

C:\Users\Admin>phantomjs -v
2.1.1

Establecer los parámetros de inicio de Chrome

# 导入模块
from selenium import webdriver

# 创建浏览器对象,指定配置参数
options = webdriver.ChromeOptions()
options.add_argument('--headless')  # 开启无界面模式
options.add_argument('--disable-gpu')  # 禁用gpu
# 实例化带有配置对象的driver对象
browser = webdriver.Chrome('D:\Development\chromedriver_win32\chromedriver.exe', chrome_options=options)

# 指定操作浏览器对象的行为
# 让浏览器访问网页
browser.get("https://www.baidu.com/")
# 保存截图调试
browser.save_screenshot('screenshot.png')

Otras operaciones

Cambio de ventana

El navegador puede abrir varias páginas web y necesita localizar de qué forma se encuentra el elemento de página web adquirido actualmente. Cambiar ventanas a través de browser.switch_to.window

# 获取当前所有的窗口
print(browser.window_handles)

# 获取当前选中窗体的名称
print(browser.current_window_handle)

print("切换前:", browser.title)

# 执行js新开一个标签页
js = 'window.open("https://www.baidu.com");'
browser.execute_script(js)
time.sleep(3)

# 获取当前所有的窗口
print(browser.window_handles)

# 切换窗体
browser.switch_to.window(browser.window_handles[1])
print("切换后:", browser.title)

interruptor ifrme

iframe es una tecnología comúnmente utilizada en HTML, es decir, una página está anidada dentro de otra página web

La página web del navegador puede contener una página web iframe. Selenium no puede acceder al contenido del marco de forma predeterminada, por lo que es necesario obtener el elemento de la página web iframe. Cambiar iframe a través de browser.switch_to.frame

import time

# 导入模块
from selenium import webdriver

# 创建浏览器对象
# 参数驱动路径
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()

browser.get("https://mail.qq.com/cgi-bin/loginpage")
print("切换前:", browser.page_source)

# 获取iframe元素对象
iframe_element = browser.find_element(By.ID, 'login_frame')
# 切换 iframe
browser.switch_to.frame(iframe_element)
print("切换后:", browser.page_source)

# 切换回 主窗口
browser.switch_to.default_content()
print("切回后:", browser.page_source)

# 利用切换标签页的方式切出frame标签
# windows = driver.window_handles
# driver.switch_to.window(windows[0])
time.sleep(5)

# 退出浏览器
browser.quit()

Configurar User-Agent y proxy

Cuando selenium controla Google Chrome, el User-Agent utiliza de forma predeterminada Google Chrome y puede ser reemplazado.

Selenium también puede usar IP proxy para controlar el navegador.

options = webdriver.ChromeOptions()
# 切换User-Agent
options.add_argument('--user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1')
# 设置代理
options.add_argument('--proxy-server=代理服务器地址') # 设置代理
browser = webdriver.Chrome('./chromedriver',chrome_options=options)

Obtener el código fuente de la página web

El código fuente de la página web obtenido es el código fuente resultante después de la ejecución de la página JS.

browser.page_source

Operaciones de cookies

El selenio puede ayudar a manejar las cookies en las páginas.

获取所有Cookies
browser.get_cookies()

把cookie转化为字典
cookies_dict = {
    
    cookie['name']: cookie['value'] for cookie in browser.get_cookies()}

通过名字获取Cookie
browser.get_cookie()

添加Cookie
browser.add_cookie()

通过名字删除Cookie
browser.delete_cookie()

删除所有Cookie
browser.delete_all_cookies()

ejecutar javascript

selenium permite que el navegador ejecute código js específico

# js语句:滚动
js = 'window.scrollTo(0,document.body.scrollHeight)' 
# 执行js的方法
browser.execute_script(js) 

js ="alert("hello world")"
browser.execute_script(js)

Página en espera

Durante el proceso de carga, la página necesita pasar tiempo esperando la respuesta del servidor del sitio web, durante este proceso es posible que el elemento de etiqueta aún no se haya cargado y, al mismo tiempo, se obtengan datos, lo que hace que el navegador no pueda encontrar el elemento que necesita ser operado, causando así una excepción. En este momento, el programa debe esperar, hay tres formas:

página de selenio esperando clasificación

强制等待
隐式等待
显式等待

1. Espera forzada

El tiempo de fraguado es demasiado corto y los elementos no se cargan. La configuración lleva demasiado tiempo y es una pérdida de tiempo.

time.sleep(秒数)

2. Espera oculta

La espera implícita tiene como objetivo el posicionamiento del elemento. La espera implícita establece un tiempo para determinar si el elemento se posiciona con éxito dentro de un período de tiempo. Si se completa, continúe con el siguiente paso. Si el posicionamiento no se realiza correctamente dentro del tiempo establecido, se informará un tiempo de espera de carga.

browser.implicitly_wait(等待时间)

3. Espera explícita, cada elemento puede definir sus propias condiciones de verificación.

Cada pocos segundos, verifique si se cumple la condición de espera. Si se cumple, deje de esperar y continúe ejecutando el código siguiente. Si no se alcanza, continuará esperando hasta que se exceda el tiempo especificado y se informará una excepción de tiempo de espera.

1. Implementar manualmente la espera de página

t = time.time()
# 定义超时时间
timeout = 60

while True:
    try:
        # 超时时间间隔
        time.sleep(1)
        url_element = browser.find_element(BY.ID, "OK")
        break
    except:
        # 超时处理
        if time.time() - t > timeout:
            break
        pass

2. Proporcionar API de espera explícita

# 等待对象模块
from selenium.webdriver.support.wait import WebDriverWait
# 导入等待条件模块
from selenium.webdriver.support import expected_conditions as EC
# 导入查询元素模块
from selenium.webdriver.common.by import By

# 使用selenium api 实现显性等待
# 创建等待对象,传入:浏览器对象、超时时间、检查元素时间间隔
wait = WebDriverWait(browser, 60, 0.1)
# 检查元素是否存在,参数是一个元祖,元祖内部描述等待元素查询方案
# EC.presence_of_element_located()
# 检查元素是否可见
# EC.visibility_of_element_located()
url_element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "OK")))

Supongo que te gusta

Origin blog.csdn.net/qq_38628046/article/details/129055814
Recomendado
Clasificación