desarrollo de python-selenium (1: uso básico)

Selenium es una herramienta de prueba automatizada para la web. Puede localizar elementos específicos de la página web a través de id / css / class / xpath y realizar una serie de operaciones para lograr pruebas automatizadas.

Instalación: pip install selenium

使用 :
1.importar selenio
2.desde selenium import xxx

1. Instale webdriver Para
usar selenium, primero necesita instalar webdriver para conectarse al navegador e interactuar, ¡a fin de realizar el control de secuencia de comandos del navegador!
Lo instalé tanto en Google Chrome como en Firefox:

Dirección de descarga del controlador web del navegador Firefox Dirección de descarga del controlador web del navegador Google
1 Dirección de
descarga del controlador web del navegador Google 2 Descargas de
Google Chrome primero ingrese ** chrome: // versión / ** en la barra de direcciones antes de descargar, mire su propia versión y descargue el
2. Inicie el navegador:

from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://www.baidu.com/')

Lo mismo va para:

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('http://www.baidu.com/')

3. Posicionamiento de los elementos de la página web El posicionamiento de los elementos de la página web
es el núcleo de las pruebas automatizadas, y también es el lugar más fácil para pisar ¡Este lugar requiere una atención especial! Las formas habituales de localizar elementos de una página web son las siguientes:

1.id 定位 : find_element_by_id ()
2.name 定位 : find_element_by_name ()
3.class 定位 : find_element_by_class_name ()
4.link 定位 : find_element_by_link_text ()
5.partial link text 定位 :
find_element_by_partial_link_name :
7.xpath 定位 : find_element_by_xpath ()
8.css 定位 : find_element_by_css_selector ()

Algunos nombres de clase son clases compuestas con múltiples combinaciones de clases, separadas por espacios. Si usa find_element_by_class_name (), el posicionamiento fallará. En este caso, puede usar "." En lugar de espacios.
También puede usar find_elements_by_xx para ubicar un grupo de elementos

4. Selenium establece el tiempo de espera.
A veces, el contenido web se almacena en caché o se retrasan en el cambio de página web, etc., lo que provocará que falle el siguiente elemento de posicionamiento, por lo que debe establecer el tiempo de espera.
1. Espera forzada:

import time
time.sleep(x)

2. Mostrar en espera
Espere explícitamente para que WebdDriver continúe ejecutándose cuando se cumpla una determinada condición; de lo contrario, lanzará una excepción de tiempo de espera (TimeoutException) cuando se alcance la duración máxima.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
element = WebDriverWait(driver, 5,0.5).until(EC.presence_of_element_located((By.ID, "kw")))
element.send_keys('selenium')
driver.quit()

La clase WebDriverWait es
un método de espera proporcionado por WebDirver . Durante el tiempo establecido, lo predeterminado es verificar si el elemento de la página actual existe cada cierto período de tiempo. Si no se detecta después del tiempo establecido, se lanzará una excepción. El formato específico es el siguiente:
WebDriverWait (controlador, tiempo de espera, poll_frequency = 0.5,
ignored_exceptions = None)

  1. controlador: controlador del navegador.
  2. timeout: el período de tiempo de espera más largo, el valor predeterminado es en segundos.
  3. poll_frequency: tiempo del intervalo de detección (duración del paso), el valor predeterminado es 0,5 s.
  4. ignored_exceptions: información de excepción después del tiempo de espera, NoSuchElementException se lanza de forma predeterminada.

WebDriverWait () generalmente se usa junto con los métodos until () o until_not (). La siguiente es la descripción de los métodos until () y until_not ().
1 hasta (método, mensaje = '') Llame al controlador proporcionado por este método como parámetro hasta que el valor de retorno sea Verdadero.
2. until_not (método, mensaje = '') Llame al controlador proporcionado por este método como parámetro hasta que el valor de retorno sea False. En este ejemplo, las condiciones_esperadas se renombran a EC mediante la palabra clave as, y se llama al método present_of_element_located () para determinar si el elemento existe.

3. Espera implícita

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import ctime
driver = webdriver.Firefox()
# 设置隐式等待为10秒
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
try:
    print(ctime())  driver.find_element_by_id("kw22").send_keys('selenium')
except NoSuchElementException as e:
    print(e)
finally:
    print(ctime())
    driver.quit()

WebDriver proporciona un método implícitamente_wait () para realizar la espera implícita, que se establece en 0 de forma predeterminada.
El parámetro predeterminado de implicitly_wait () está en segundos. En este ejemplo, el tiempo de espera se establece en 10 segundos.
En primer lugar, estos 10 segundos no son un tiempo de espera fijo, no afectan la velocidad de ejecución del script.
En segundo lugar, no espera un elemento en la página. Cuando el script se ejecuta en la ubicación de un elemento determinado, si el elemento se puede ubicar, continuará ejecutándose; si el elemento no se puede ubicar, determinará continuamente si el elemento está ubicado en forma de sondeo.
Suponiendo que el elemento se encuentra en el sexto segundo, la ejecución continúa, si el elemento no se ubica hasta que se excede el período de tiempo establecido (10 segundos), se lanzará una excepción.
La espera invisible es establecer un tiempo máximo de espera. Si la página web se carga dentro del tiempo especificado, ejecute el siguiente paso, de lo contrario espere hasta que expire el tiempo y luego ejecute el siguiente paso.

5. Controlar el funcionamiento del navegador

función efecto
driver.set_windows_size () Establecer el tamaño del navegador (los parámetros son píxeles)
driver.back () Contraportada
driver.forward () Página de avance
driver.refresh () actualizar página
driver.maximize_window () Maximizar la página
driver.minimize_window () Minimizar la página
from selenium import webdriver
driver = webdriver.Firefox()

#访问百度首页
first_url= 'http://www.baidu.com'
print("now access %s" %(first_url))
driver.get(first_url)
driver.maximize_window()
#访问新闻页面
second_url='http://news.baidu.com'
print("now access %s" %(second_url))
driver.get(second_url)

#返回(后退)到百度首页
print("back to  %s "%(first_url))
driver.back()

#前进到新闻页
print("forward to  %s"%(second_url))
driver.forward()

driver.quit()

7. Manipular elementos de la página web

método efecto
hacer clic() Haga clic en el elemento
claro() Texto claro (si es posible)
send_keys (valor) Simular operación de tecla
get_attribute (nombre) Obtener el valor del atributo del elemento
se visualiza() Establecer si el elemento es visible para el usuario
entregar() enviar formulario
Talla Devuelve el tamaño del elemento.
ubicación Devuelve las coordenadas del elemento.
texto Obtener el texto del elemento
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
#刷新浏览器
browser.refresh()

#提交表单
search_text = driver.find_element_by_id('kw')
search_text.send_keys('selenium')
search_text.submit()

# 获得输入框的尺寸
size = driver.find_element_by_id('kw').size
print(size)
loca=driver.find_element_by_id('kw').location
print(loca)

more_x = loca.get('x') #元素的x坐标
more_y = loca.get('y') #元素的y坐标
more_w = size.get('width')  #元素的宽
more_h = size.get('height') #元素的高

# 返回百度页面底部备案信息
text = driver.find_element_by_id("cp").text
print(text)

# 返回元素的属性值, 可以是 id、 name、 type 或其他任意属性
attribute = driver.find_element_by_id("kw").get_attribute('type')
print(attribute)

# 返回元素的结果是否可见, 返回结果为 True 或 False
result = driver.find_element_by_id("kw").is_displayed()
print(result)

driver.quit()

8. Operación del mouse

En WebDriver, los métodos de operación del mouse se encapsulan en la clase ActionChains y se proporcionan.

from selenium.webdriver import ActionChains

Importe la clase ActionChains que proporciona operaciones con el mouse.

ActionChains(driver)

Llame a la clase ActionChains () y pase el controlador del navegador como parámetro.
Funciones de uso común:

función efecto
haga doble clic() Haga doble clic
drag_and_drop (fuente, destino) Arrastra a un elemento y suelta
move_to_element (arriba) Coloca el cursor sobre un elemento con el mouse
context_click () Simule la operación del botón derecho del mouse, debe especificar la posición del elemento al llamar (clic derecho)
llevar a cabo() La ejecución de todas las acciones almacenadas en ActionChains puede entenderse como una acción de envío para toda la operación.
haga clic en (on_element = None) Haga clic en el botón izquierdo del mouse
move_by_offset (desplazamiento x, desplazamiento y) El mouse se mueve de la posición actual a una determinada coordenada
drag_and_drop_by_offset (fuente, xoffset, yoffset) Arrastre a una determinada coordenada y suelte
key_down (valor, elemento = Ninguno) Presione una tecla en un teclado
key_up (valor, elemento = Ninguno) Suelta una llave
release (on_element = Ninguno) Suelte el botón izquierdo del mouse en la posición de un elemento
send_keys_to_element (elemento, * keys_to_send) Envía una clave al elemento especificado
move_to_element_with_offset (to_element, xoffset, yoffset) Qué tan lejos moverse a un elemento (coordenadas superior izquierda)
from selenium import webdriver
# 引入 ActionChains 类
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
driver.get("https://www.baidu.cn")

# 定位到要悬停的元素
above = driver.find_element_by_link_text("设置")
# 对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(above).perform()

9. Operación del teclado

función efecto
send_keys (Keys.BACK_SPACE) Eliminar tecla (Retroceso)
send_keys (Keys.SPACE) Espacio
send_keys (Keys.TAB) Pestaña
send_keys (Keys.ESCAPE) Tecla de retroceso (Esc)
send_keys (Keys.ENTER) Ingresar
send_keys (Keys.CONTROL, 'a') Seleccionar todo (Ctrl + A)
send_keys (Keys.CONTROL, 'c') Copiar (Ctrl + C)
send_keys (Keys.CONTROL, 'x') Cortar (Ctrl + X)
send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
send_keys(Keys.F1) 键盘 F1
from selenium import webdriver
# 引入 Keys 模块
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

# 输入框输入内容
driver.find_element_by_id("kw").send_keys("seleniumm")

# 删除多输入的一个 m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)


# 输入空格键+“教程”
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
driver.find_element_by_id("kw").send_keys("教程")

# ctrl+a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')

# ctrl+x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x')

# ctrl+v 粘贴内容到输入框
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v')

# 通过回车键来代替单击操作
driver.find_element_by_id("su").send_keys(Keys.ENTER)
driver.quit()

10.获取断言信息
拿实际结果与预期进行比较,这个比较的称之为断言,通常通过获取title 、URL和text等信息进行断言。

title:用于获得当前页面的标题。

current_url:用户获得当前页面的URL。

text:获取搜索条目的文本信息。
from selenium import webdriver
from time import sleep


driver = webdriver.Firefox()
driver.get("https://www.baidu.com")

print('Before search================')

# 打印当前页面title
title = driver.title
print(title)

# 打印当前页面URL
now_url = driver.current_url
print(now_url)

driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
sleep(1)

print('After search================')

# 再次打印当前页面title
title = driver.title
print(title)

# 打印当前页面URL
now_url = driver.current_url
print(now_url)

# 获取结果数目
user = driver.find_element_by_class_name('nums').text
print(user)

driver.quit()

运行结果如下:

Before search================
百度一下,你就知道
https://www.baidu.com/
After search================
selenium_百度搜索
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx...
搜索工具
百度为您找到相关结果约5,380,000

Supongo que te gusta

Origin blog.csdn.net/liulanba/article/details/115294919
Recomendado
Clasificación