¡Diez minutos basados en cero para comprender el programa de inserción automática con superdetalle! !

Este artículo utiliza el módulo de selenio de Python para implementar un programa automático de perforación de tarjetas.


La estructura de este artículo: primero introduzca tres conocimientos preparatorios, los grandes pueden omitirlo. Luego, comience directamente con el código (porque este código es realmente súper simple). Pero no se recomienda ningún contacto con el módulo junto a los Amigos de la mirada directa al código . Después de todo, los diferentes métodos de procesamiento de páginas web siguen siendo diferentes.

Este artículo presenta el principio con el mayor detalle posible y está dedicado a permitir que los lectores escriban programas para varias páginas web de registro después de leer.

Introducción al módulo de selenio

Este módulo nos permite usar el programa py para operar navegadores convencionales como Chrome y Firefox para lograr pruebas automatizadas.

Si queremos que la computadora nos ayude a hacer algo con el navegador, debemos decirle dónde hacer clic primero, qué ingresar y luego dónde hacer clic. Este "dónde" se logra mediante el posicionamiento del módulo de selenio:

Proporciona ocho métodos de posicionamiento , los amigos interesados ​​pueden echar un vistazo. Aquí presentamos principalmente los tres tipos utilizados en el programa: (El método de uso específico se explica en la parte del código)

método efecto
find_element_by_id () Posicionamiento por id del elemento
find_element_by_name () Localizar por el nombre del elemento
find_element_by_xpath () Localizar por xpath del elemento

¿Qué es esto id, namesuma xpath? De hecho, es el atributo de un determinado contenido en una página web.

Sabemos que una página web se compone de muchos elementos, como el blog que estás navegando, que incluye la foto de perfil del blogger, el texto que estás leyendo, el botón Me gusta (loco explícito), etc. en la esquina inferior izquierda . Cuando los programadores escriben páginas web, para facilitar su uso distinguir estos elementos agregará diferentes elementos idy name, como nuestro nombre indica.

nameY la iddiferencia es que, namecomo nuestro nombre, y idcomo nuestro número de identificación. Puede haber personas con el mismo nombre pero sin el mismo número de identificación. (Esto no es riguroso, pero vamos a entenderlo de esta manera. Otras diferencias no son muy importantes para este programa ) . Vale la pena señalar que no todos los elementos tienen nameo tienen idatributos. Así que todavía necesitamos un tercer método de XPathposicionamiento

Por ejemplo, el blog que estás navegando, presiona F12, haz clic para elementver el código fuente, algunas etiquetas son así: lo que dijimos, por
Inserte la descripción de la imagen aquí
ejemplo, esta etiqueta div solo tiene idatributos.
Inserte la descripción de la imagen aquí
Puedes ver que la etiqueta de entrada en la imagen de arriba tiene tanto ideste atributo como nameeste atributo.

A continuación, instale selenium:

pip install Selenium

Controlador del navegador

El selenio en sí no tiene la capacidad de abrir el navegador y requiere la cooperación del controlador de cada navegador. A continuación, instalamos un controlador de navegador: ¡verifique la versión de su navegador antes de descargar!
La versión del navegador Chrome corresponde a
varias versiones de Chrome para la descarga de controladores.
Otros navegadores pueden descargar la dirección de Baidu.

FirefoxDriver y otra descarga de controladores y configuración de controladores

Después de descargar el controlador del navegador, también debe configurar las variables de entorno para que su programa pueda encontrar el controlador: (La ruta almacenada en la variable de entorno le dice a la computadora dónde encontrarlo cuando necesita ejecutar un programa. El sistema está recibiendo Después de ejecutar un comando en un programa, irá a la tabla de variables de entorno una por una para ver si hay algún programa que desee)

Mi PC -> Propiedades -> Configuración del sistema -> Avanzado -> Variables de entorno -> Variables del sistema -> Ruta, agregue la ruta de almacenamiento de su unidad como el directorio "F: \ ChromeDriver" al valor de Ruta. Por ejemplo: campo de ruta; F: \ ChromeDriver

Después de configurar las variables de entorno, puede utilizar el siguiente código para obtener el controlador del controlador del navegador:

 driver = webdriver.Chrome()

Simular el clic del mouse y rellenar

Tome la siguiente página web como ejemplo: Necesito completar mi identificación de estudiante, contraseña y hacer clic en el botón "Iniciar sesión". Entonces, en primer lugar, ¿cómo se usa el programa para ubicar estas posiciones que deben completarse / hacer clic? ¡Utilice el método descrito anteriormente!
Inserte la descripción de la imagen aquí
F12Busque el código fuente de Elements, luego haga clic en el ícono del mouse en el lado izquierdo de la figura a continuación, y luego haga clic en la posición donde necesita ingresar la identificación del estudiante en la figura de arriba; busque el código fuente de este elemento.
Inserte la descripción de la imagen aquí
Encontramos esto :
Inserte la descripción de la imagen aquí
puede ver que esta etiqueta tiene un atributo de nombre y su valor userid. ¡Entonces usamos su nombre para localizarlo! Código:

driver.find_element_by_name('userid').send_keys('你的学号')

La imagen de arriba driveres el controlador del navegador obtenido en la instalación del controlador de este artículo

¡Una línea de código es suficiente para completar la identificación del estudiante! ¿No es sencillo? ! Para otros lugares que necesitamos completar, simplemente haga lo mismo.

name¿Qué debo hacer si encuentro una etiqueta sin atributos? Por ejemplo, el siguiente botón "Iniciar sesión":
Inserte la descripción de la imagen aquí
¡No importa! Tiene id. Usemos idpara localizar:

driver.find_element_by_id('formSubmitBtn').click()#点击登录

Posicionamiento XPath

Alguna posicion no idno name, solo class, como hacer, no utilizo classpara ubicar? Pero otros elementos también tienen lo mismo class. Entonces solo podemos usarlo xpath(de hecho, no debería ser ningún problema usar xpath para el posicionamiento anterior, porque cada elemento de la página debe tener un xpath único )

Cómo encontrar el xpath de un determinado cuadro de entrada: Haga clic con el botón derecho en el código del cuadro de entrada para abrir el menú y operar como se muestra a continuación: Después de Inserte la descripción de la imagen aquí
encontrar el xpath de un cuadro de entrada, lo almacenamos en una variable (porque el uso directo ser muy largo ... por supuesto. No hay problema si lo pega directamente en la ubicación correspondiente)

movement = "/html/body/div[1]/form/div[3]/div[2]/label[1]"#当日没有移动的按钮
driver.find_element_by_xpath(movement).click()#点选按钮

Algunos detalles

Después de completar la información de registro para el ejemplo del blogger, debe hacer clic en "Enviar" y luego aparecerá una ventana de confirmación después de un tiempo , y debe confirmar un envío. Pero al hacer clic en el botón "Enviar", la ventana de confirmación aún no ha aparecido. Entonces usamos una suspensión entre los dos clics para pausar el programa por un tiempo, esperamos a que salga esta ventana y luego hacemos clic para confirmar.

driver.find_element_by_xpath(submit).click()#点击提交
time.sleep(2)
driver.find_element_by_xpath(check).click()#点击确定

Código completo

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC
from pyrsistent._transformations import inc

# 只需修改下面三项即可 学号 密码 打卡网址
username = "登陆账号"
password = "对应密码"
url = "此处填写打卡网址" 

# 下面是每次填报的时候几个需要填写的地方,F12找到这些位置的 full XPath
movement = "/html/body/div[1]/form/div[3]/div[2]/label[1]"#有无移动
touch = "/html/body/div[1]/form/div[4]/div[2]/label[1]"#有无接触史
condition = "/html/body/div[1]/form/div[5]/div[2]/label[1]"#健康状况
quarantine = "/html/body/div[1]/form/div[6]/div[2]/label[1]"#是否隔离
inCollege = "/html/body/div[1]/form/div[7]/div[2]/label[1]"#是否在校
submit = "/html/body/div[1]/form/div[8]/a"#提交
check = "/html/body/div[3]/div[2]/div[2]/a[2]"#最后的确定按钮

# 模拟登陆打卡
def do_login(driver):
    # driver.maximize_window() 将窗口最大化
    # 找到登录框 输入账号密码
    driver.find_element_by_name('userid').send_keys(userName)
    driver.find_element_by_name('userpwd').send_keys(password)
    driver.find_element_by_id('formSubmitBtn').click()#点击登录

    driver.find_element_by_xpath(movement).click()
    driver.find_element_by_xpath(touch).click()
    driver.find_element_by_xpath(condition).click()
    driver.find_element_by_xpath(quarantine).click()
    driver.find_element_by_xpath(inCollege).click()
    
    driver.find_element_by_xpath(submit).click()#点击提交
    time.sleep(2)
    driver.find_element_by_xpath(check).click()#点击确定
    time.sleep(1)

if __name__ == '__main__':
    # 模拟浏览器打开网站
    driver = webdriver.Chrome()
    driver.get(url)
    # 登录并打卡
    do_login(driver)
    print("打卡结束")
    time.sleep(1)#终端给你时间确认已经打卡成功
    driver.quit()

Después de escribir el programa, puede escribirlo en un exe. También es muy conveniente agregarlo para iniciar o iniciarlo manualmente sin agregarlo al escritorio. Tutorial de paquete exe

Descargo de responsabilidad: este blog es solo para el aprendizaje y la comunicación, no utilice el contenido escrito en este blog para acciones ilegales. Este blogger no soporta todas las consecuencias ocasionadas

Configure el servidor para realizar el punch-in automático

Desde que terminé de escribir este programa, he estado pensando, si un día no uso la computadora en toda la mañana, ¿perdería el tiempo para registrarme? O es más problemático encender la computadora una vez para registrarse. El grandullón dio una idea: coloque el programa directamente en el servidor e inícielo con regularidad. ¡Jajajaja! (Obviamente es mi propia comida, ni siquiera puedo pensar en ella)

Así que tengo el siguiente blog para configurar mi programa de tarjetas perforadas en el servidor para completar la operación automática de manera tan fácil ~

Supongo que te gusta

Origin blog.csdn.net/weixin_44559752/article/details/107634627
Recomendado
Clasificación