Red de conocimiento informático - Descarga de software - Cómo escribir un programa rastreador en Python y llamar al kit de herramientas Selenium

Cómo escribir un programa rastreador en Python y llamar al kit de herramientas Selenium

1. ¿Qué es Selenium?

Selenium es un completo sistema de prueba de aplicaciones web, que incluye grabación de pruebas (selenium IDE), escritura y ejecución (Selenium Remote Control) y procesamiento paralelo (Selenium Grid). Selenium Core, el núcleo de Selenium, se basa en JsUnit y está escrito completamente en JavaScript, por lo que puede usarse en cualquier navegador que admita JavaScript.

Selenium puede simular navegadores reales, herramientas de prueba automatizadas, admite múltiples navegadores y se utiliza principalmente para resolver problemas de representación de JavaScript en rastreadores.

2. Usos básicos de selenium

Al escribir rastreadores en Python, se utiliza principalmente el Webdriver de selenium. Primero podemos ver qué navegadores es Selenium. Webdriver se admite de las siguientes maneras.

Los resultados de la ejecución son los siguientes. A partir de los resultados, también podemos ver que Basic Mountain es compatible con todos los navegadores comunes:

Permítanme hablar sobre PhantomJS, PhantomJS, que es una API de JavaScript de servidor basada en WebKit. Es compatible con la Web sin compatibilidad con el navegador y admite de forma rápida y nativa varios estándares web: procesamiento DOM, selectores CSS, JSON y más. PhantomJS se puede utilizar para automatización de páginas, monitoreo de redes, capturas de pantalla de páginas web y pruebas sin interfaz.

Declarar objetos del navegador

Arriba sabemos que Selenium admite muchos navegadores, pero si desea declarar y llamar al navegador, debe:

Desde selenium importar controlador web

navegador = controlador web. chrome()

navegador = webdriver. Firefox()

Aquí sólo se escriben dos ejemplos. Por supuesto, otros navegadores compatibles también pueden llamar a esto.

Visitar página

Importar controlador web desde selenium

Navegador = webdriver. chrome()

navegador . get(" HTT idu . com ")print(navegador . página _ fuente)

browser.close()

Arriba Después Después de ejecutar el código, el navegador Chrome se abrirá automáticamente, iniciará sesión en Baidu, imprimirá el código fuente de la página de inicio de Baidu y luego cerrará el navegador.

Buscar elemento

Búsqueda de un solo elemento

Importar controlador web desde selenium

Navegador = webdriver.

chrome()

browser.get("bao.com ")

entrada _ primero = navegador buscar _ elemento _ por _ id(" q ")

entrada _ segundo = navegador . buscar _ elemento _ por _ CSS _ selector(" # q ")

entrada _ tercer = navegador . = " q "]')print(input _ first)print(input _ second)print(input _third)

browser.close()

Aquí comenzamos con Tres Diferentes formas de obtener elementos responsivos. La primera forma es a través de id, la segunda es a través del selector CSS y la tercera es a través del selector xpath. Los resultados son los mismos.

Los resultados son los siguientes:

Aquí se muestran algunas formas comunes de buscar elementos:

Buscar elementos por nombre

Buscar elementos por identificador

p>

Buscar elemento por xpath

Buscar elemento por texto de enlace

Buscar texto de enlace de parte del elemento

Buscar elemento por nombre de etiqueta

Buscar elementos por nombre de clase

Buscar elementos por selector css

El siguiente método es un método más general: aquí debes recordar el módulo Por, así que es necesario importarlo.

Por importador

Desde selenium importar webdriver desde selenium.webdriver.common.by importar por

browser=webdriver. chrome()

browser.get("obao.com ")

input_first = navegador .find_element(By.ID,"q") print(input_first)

browser.close()

Por supuesto, este método es común al método anterior. El ID (By.ID, "q") en browser.find_element se puede reemplazar con otros valores.

Búsqueda de múltiples elementos

De hecho, existe una diferencia entre múltiples elementos y un solo elemento, por ejemplo: find_elements, un solo elemento es find_element, no hay diferencia para otros usos, use un ejemplo para ilustrar:

Importar controlador web desde selenium

browser = webdriver. chrome()

browser.get("obao.com ")

lis = navegador buscar _ elementos _ por _ CSS _ selector('.service-bd li ') Imprimir. (lis)

browser.close()

Lo que obtienes de esta manera es una lista.

Por supuesto, el método anterior también se puede importar desde Selenium. para lograr. puerta webdriver.com. Importado por.

lis = browser.find_elements(Por. CSS_SELECTOR,'.

Servicios - BD Li')

El mismo método de búsqueda dentro de un solo elemento también existe para búsquedas de varios elementos:

Buscar elemento por nombre

Buscar por elemento identificador

Buscar elemento por xpath

Buscar elemento por texto de enlace

Buscar texto de enlace de parte del elemento

Buscar elemento por nombre de etiqueta

p>

Buscar elementos por nombre de clase

Buscar elementos por selector css

Operaciones interactivas de elementos

Llamar a métodos interactivos en el elementos obtenidos.

importar tiempo de importación de webdriver desde selenium

browser = webdriver. chrome()

browser.get("bao.com ")

entrada _ str = navegador . buscar _ elemento _ por _ id(' q ')

input_str.send_keys("ipad")

Time.sleep(1)

input_str.clear()

input_str enviar _ claves(" mak. book pro ")

botón = navegador . buscar _ elemento _ por _ clase _ nombre(' BTN-search ')

botón.click()

Como se puede ver en los resultados de la ejecución, el programa abrirá automáticamente el navegador Chrome, abrirá Taobao e ingresará al iPad, luego lo eliminará, volverá a ingresar a MakBook pro y hará clic en buscar.

Acciones interactivas

Adjuntar una operación a una cadena de operaciones para su ejecución en serie.

Importar controlador web desde selenium Desde selenium.webdriver cadena de acciones de importación

browser = webdriver. chrome()

url = "ry/try.php?filename = jquery ui-API-dropable" navegador . get(URL)

cambiar navegador _ a . ' iframeResult ')

fuente = navegador . buscar _ elemento _ por _ CSS _ selector(' # arrastrable ')

objetivo = navegador . (' # drop able ')

Acción = cadena de acciones (navegador)

actions.drag_and_drop(source, target)

actions.perform()

Ejecutar JavaScript

Este es un método muy útil, donde puede llamar directamente a métodos js para implementar algunas operaciones.

El siguiente ejemplo es iniciar sesión en Zhihu a través de js y luego desplazarse hasta la parte inferior de la página y aparecerá un cuadro emergente.

Importar controlador web desde selenium

browser = webdriver.

chrome()

browser.get("u.com/explore ")

navegador ejecutar _ script(' ventana . desplácese hasta (0, document.body.scrollHeight) ' )

navegador . ejecutar _ script(' alert(" To Bottom ")')

Obtener atributos de elemento

get_attribute("Clase")

p>

Importar controlador web desde selenium

browser = webdriver. chrome()

URL = 'hihu com/explore' navegador. get(URL)

logo = navegador . -logo ')print(logo)print(logo . get _ atributo(' clase '))

Obtener valor de texto

Texto

Importar desde Selenium webdriver

navegador = controlador web. chrome()

URL = ' com/explore ' navegador . get(URL)

entrada = navegador . -question ')print(input . text)

Obtener ID, ubicación, nombre de etiqueta

Identificación (identificación)

Ubicación

Nombre de etiqueta

Tamaño

Importar controlador web desde selenium

Navegador = webdriver. chrome()

URL = ' com/explore ' navegador . get(URL)

entrada = navegador . -question ')Imprimir(input.id)Imprimir(input.ubicación)Imprimir(input.tag_name)Imprimir(input.size)

Marco básico

Se encuentra en muchas páginas web. páginas Etiqueta de marco, por lo que cuando capturamos datos, implica cortar el marco y recortarlo. El siguiente ejemplo lo demuestra.

Aquí se utilizan comúnmente Switch_to.from() y switch_to.parent_frame().

Importar hora desde selenium importar webdriver desde selenium.common.exceptions importar NoSuchElementException

browser = webdriver.

chrome()

url = 'oob.com/try/try.php? nombre de archivo = jquery ui-API-drop table ' navegador . get(URL)

navegador _ a .frame(' iframeResult ')

fuente = navegador . por _ CSS _ selector(' # arrastrable ') imprimir(fuente) intente:

LOGO = navegador buscar _ elemento _ por _ clase _ nombre(' LOGO ') excepto NoSuchElementException: imprimir(' NO LOGO . ')

browser.switch_to.parent_frame()

logo = navegador buscar _ elemento _ por _ clase _ nombre(' logo ')print(logo)print(logo . texto )

Espera

Cuando se utiliza la espera implícita para ejecutar una prueba, si WebDriver no puede encontrar el elemento en el DOM, continuará esperando después del tiempo establecido y lanzará un. excepción de que no se puede encontrar el elemento. En otras palabras, cuando se busca un elemento o cuando un elemento no aparece inmediatamente, la espera implícita esperará un período de tiempo para encontrar el DOM, con un tiempo predeterminado de 0.

Espera implícita

Si se comprueba que el elemento no se ha cargado en un momento determinado, seguiremos esperando el tiempo que especifiquemos. Si no se ha cargado durante más tiempo del que especificamos, se generará una excepción. Si no se ha cargado cuando no es necesario esperar, se ejecutará inmediatamente.

Importar controlador web desde selenium

browser = webdriver. chrome()

navegador . implicit_wait(10)

browser.get('com/explore ')

entrada = navegador buscar _ elemento _ por _. class _ name(' zu-top-add-question ')print(input)

Mostrar espera

Especifique las condiciones de espera y el tiempo máximo de espera, tiempo durante el cual Determine si la espera se cumple la condición. Si encuentra uno, regrese inmediatamente. De lo contrario, esperará hasta el tiempo máximo de espera que especifique. Si aún no se cumple, se lanzará una excepción y, si se cumple, volverá normalmente.

Importe el controlador web desde selenium. Común mediante importación desde el controlador web de selenium. p>navegador=controlador web.

chrome()

browser.get('.taobao.com/')

esperar = WebDriverWait(navegador, 10)

entrada = esperar hasta(. EC . presencia _ de _ elemento _ ubicado((By. ID, ' q ')))

botón = esperar hasta(EC . elemento _ para _ ser _ cliqueable((By. CSS_SELECTOR ,' . BTN-Search'))) Imprimir (entrada, botón)

La condición en el ejemplo anterior: EC.presence_of_element_located() es confirmar si el elemento ha aparecido.

EC.element_to_be_clickable() es para confirmar si se puede hacer clic en el elemento.

Condiciones de juicio comunes:

Title_is el título es algo.

El título contiene algo.

Cargue el elemento presencia_of_element_located y pase la tupla de posicionamiento, como (By.ID, 'p').

El elemento Visibility_of_element_located es visible, pasando la tupla de posicionamiento.

Visibilidad_de visible, pasa el elemento objeto.

Todos los elementos se cargan donde existen todos los elementos.

El texto del elemento contiene algo de texto.

El valor del elemento contiene algo de texto.

marco _ para _ estar _ disponible _ y _ cambiar _ a _ él cargando y cambiando el cuadro.

elemento _ ubicadoEl elemento no es visible.

Se puede hacer clic en los elementos en los que se puede hacer clic.

El estancamiento _ de determina si un elemento todavía está en el DOM y puede determinar si la página se ha actualizado.

Los elementos Element_to_be_selected se pueden seleccionar y pasar al objeto Element.

Puedes seleccionar el elemento element_located_to_be_selected y pasar la tupla de posicionamiento.

Element_selection_state_to_be pasa el elemento objeto y estado, y devuelve Verdadero si son iguales; de lo contrario, devuelve Falso.

elemento _ ubicado _ selección _ estado _ a _ ser pasa en la tupla de ubicación y estado, y devuelve Verdadero si son iguales; de lo contrario, devuelve Falso.

¿Existe Alert_is_present?

Avance y retroceso del navegador

Atrás()

Adelante()

Importación desde el tiempo de importación del controlador web Selenium

navegador = controlador web.

Chrome()

browser.get('ww.baidu.com/')

browser.get('aobao.com/')

navegador. get('ww.python.org/')

browser.back()

Tiempo.sleep(1)

browser.forward()

browser.close()

Operación de cookies

get _ cookies()

delete_all_cookes()

add_cookie ( )

Importar controlador web desde selenium

browser = webdriver. chrome()

navegador . get(' om/explore ')print(navegador . get_cookie())

navegador add_cookie({ ' nombre ':' nombre ', ' dominio. ': 'www.zhihu.com ', ' valor ': 'Zhao Fan' })print(browser.get_cookies())

navegador . eliminar _ todas _ cookies()print (browser. get_cookies( ))

Gestión de etiquetas

Se implementa una nueva pestaña window.open() ejecutando el comando js.

Las diferentes pestañas están en browser.window_handles en la lista.

Puedes operar la primera pestaña a través de browser.window_handles[0].

Importar controlador web desde el momento de importación de Selenium

browser = webdriver. chrome()

browser.get('baidu.com ')

navegador ejecutar _ script(' ventana . open()')print(navegador . ventana _ identificadores)

browser.switch_to_window(browser.window_handles[1])

browser.get('bao.com ')

Tiempo.sleep(1)

browser.switch_to_window(browser. window_handles[0])

browser.get('hon.org ')

Manejo de excepciones

Aquí está solo una demostración sencilla para encontrar un elemento que no existe.

Importar controlador web desde selenium Importar excepción de tiempo de espera, NoSuchElementException de selenium.common.exceptions

Browser = webdriver.

Prueba de Chrome():

navegador . get(' du . com ')excepción: print(' Time Out ')prueba:

buscar _ Elemento _ por _ id(. ' hola ') excepto NoSuchElementException: print(' No Element ') y finalmente:

browser.close()

Vale la pena esperar todos los esfuerzos y cada sueño debe ser irrigado !