Cómo escribir un programa rastreador en Python y llamar al kit de herramientas 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() p>
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 !