Inicio de sesión automático de la página web de Selenium, tarjeta perforada (1)


、 Python+Selenio

Selenium es una herramienta que utiliza la simulación por computadora para operar las páginas web del navegador, que puede realizar la automatización. Se estima que muchos socios pequeños saben algo cuando aprenden Python. Los pasos de instalación también son muy simples:

pip install selenium
#如果不行,就
sudo pip install selenium
#如果还不行,就
pip3 install selenium
#就
sudo pip3 install selenium

Además de la biblioteca de instalación, también hay un navegador iniciado por el programa selenium, por lo que el entorno de ejecución del programa necesita instalar el firefoxnavegador y descargarlo con anticipación.geckodriver

wget https://github.com/mozilla/geckodriver/releases/download/v0.22.0/geckodriver-v0.22.0-linux64.tar.gz
各个版本的driver下载地址如下
https://github.com/mozilla/geckodriver/releases
tar zxvf geckodriver-v0.22.0-linux64.tar.gz
mv geckodriver /usr/local/bin

2. Usar pasos

1. Importar la biblioteca

el código se muestra a continuación:

import time
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

2. Flujo del programa

  • abre la página web;
  • Identifique la ubicación de los cuadros de cuenta y contraseña e ingrese la cuenta y la contraseña;
  • Simular clic para iniciar sesión
  • Simular golpe de clic

3. Código específico

el código se muestra a continuación:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time
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
from selenium.webdriver import ActionChains

class LoginUrl(object):
	#初始化类的属性
	def __init__(self, driver, url, username, password):
		self.__driver = driver
		self.__url = url
		self.__username = username
		self.__password = password
	#打开网页的方法
	def openwebsite(self):
		self.__driver.maximize_window()
		self.__driver.get(self.__url)
	#输入网页账号
	def inputusername(self, find_element_method, element):
		if(find_element_method == "id"):		
			WebDriverWait(self.__driver, 10).until(EC.presence_of_element_located((By.ID, element)))#等待10s,每500ms查询一次,直到元素加载完毕或超过10s结束
			usrName = self.__driver.find_element_by_id(element)
		elif(find_element_method == "name"):
			WebDriverWait(self.__driver, 10).until(EC.presence_of_element_located((By.NAME, element)))
			usrName = self.__driver.find_element_by_name(element)
		elif(find_element_method == "xpath"):
			WebDriverWait(self.__driver, 10).until(EC.presence_of_element_located((By.XPATH, element)))
			usrName = self.__driver.find_element_by_xpath(element)
		else:
			print("find element error!")
		usrName.send_keys(self.__username)
	#输入网页密码
	def inputpassword(self, find_element_method, element):
		if(find_element_method == "id"):
			WebDriverWait(self.__driver, 10).until(EC.presence_of_element_located((By.ID, element)))
			passWrd = self.__driver.find_element_by_id(element)
		elif(find_element_method == "name"):
			WebDriverWait(self.__driver, 10).until(EC.presence_of_element_located((By.NAME, element)))
			passWrd = self.__driver.find_element_by_name(element)
		elif(find_element_method == "xpath"):
			WebDriverWait(self.__driver, 10).until(EC.presence_of_element_located((By.XPATH, element)))
			passWrd = self.__driver.find_element_by_xpath(element)
		else:
			print("find element error!")
		passWrd.send_keys(self.__password)
	#点击登陆
	def clicksubmit(self, find_element_method, element):
		if(find_element_method == "id"):
			WebDriverWait(self.__driver, 5).until(EC.presence_of_element_located((By.ID, element)))
			self.__driver.find_element_by_id(element).click()
		elif(find_element_method == "name"):
			WebDriverWait(self.__driver, 5).until(EC.presence_of_element_located((By.NAME, element)))
			self.__driver.find_element_by_name(element).click()
		elif(find_element_method == "xpath"):
			WebDriverWait(self.__driver, 5).until(EC.presence_of_element_located((By.XPATH, element)))
			self.__driver.find_element_by_xpath(element).click()
		else:
			print( "find element error!")
	#test
	def test(self, find_element_method, element):
		ActionChains(self.__driver).move_to_element(self.__driver.find_element_by_xpath(element)).perform()
		self.__driver.find_element_by_xpath(element).click()

def main():
	#登录打卡的网站
	browser1 = webdriver.Firefox()
	shuai = LoginUrl(browser1, "http://xxxxxxxxxx/index.html", u"your name", u"your password")
	shuai.openwebsite()
	# 输入账号
	shuai.inputusername("id", "loginid")
	# 输入密码
	shuai.inputpassword("id", "userpassword")
	# 点击登录
	shuai.clicksubmit("xpath", "//button[@id='submit']") 
	# 等待完成
	time.sleep(3)
	# 点击考勤
	shuai.clicksubmit("xpath", "//div[@class='singBtn']/span") 
	# 等待完成
	time.sleep(3)
	# 更新打卡时间,之前出问题是应为Xphth写的问题,简化之后就好了
	shuai.test("xpath", "//a[@class='resign']")
	print("succeess...")
	
if __name__ == "__main__":
	main()

4. Explicación del código

  1. Comenzando desde la función principal, primero inicie sesión en el sitio web y use su propio sitio web, nombre de usuario y contraseña para reemplazar la parte en el código. Normalmente, cuando iniciamos sesión manualmente, debido al problema de las cookies, no necesitamos repetir la entrada, pero aquí está la llamada o necesidad de volver a entrar.
    inserte la descripción de la imagen aquí

  2. El siguiente paso es ingresar el número de cuenta y la contraseña. Los parámetros "id" y "loginid" no son universales. Primero debe iniciar sesión manualmente en el sitio web, usar la herramienta de desarrollo F12, ver el código fuente del sitio web, y busque la etiqueta correspondiente. Haga clic con el botón derecho en el cuadro de inicio de sesión del cuadro de inicio de sesión - "marque , puede ver el código fuente correspondiente. Si puede ver la etiqueta "id" y el valor correspondiente en el código, puede encontrarlo por id. Del mismo modo, si hay una etiqueta de "nombre" y el valor correspondiente, también puede usar el nombre para buscar. Si no hay ninguno, también puede encontrarlo a través de Xpath. Para obtener detalles de este método, consulte el descripción en la Sección 5. No necesita entenderlo en absoluto, y hay herramientas especiales para ayudar.
    inserte la descripción de la imagen aquí

  3. La lógica de implementación de los cuadros de llenado de cuenta y contraseña debe ser similar, y se proporcionan tres métodos de posicionamiento, etiqueta de identificación, etiqueta de nombre y posicionamiento Xpath aproximado.

  4. Cuando el programa localiza el cuadro de contraseña de la cuenta por uno de los tres métodos, el programa necesita ayudarnos a completar el número de cuenta y la contraseña, es decir, usrName.send_keys(self.__username)ypassWrd.send_keys(self.__password)

  5. Después de completar el texto, es natural hacer clic en el botón de inicio de sesión. Esta vez, se utiliza un método diferente, es decir, el Xpath Dafa simple y grosero. El segundo parámetro en realidad es generado por una herramienta especial, y puede simplemente copiar en uso
    inserte la descripción de la imagen aquí

  6. self.__driver.find_element_by_xpath(element).click()El significado de esta oración es usar el método correspondiente para encontrar el elemento correspondiente y completar la operación de clic.

  7. Las operaciones restantes, como hacer clic y perforar tarjetas, son pasos específicos para hacer clic. El orden y el método de los diferentes sitios web son diferentes, pero para aquellos que solo necesitan hacer clic, la lógica implementada es la misma.

5. Introducción al uso de Xpath

Método 1

1. Descargue el archivo xpath-helper.crx, que ahora solo se puede buscar en línea, pero no se puede buscar en la Tienda
2. Busque el menú de opciones "Extensión" en el navegador Google o Edge.
3. Luego ingresará a la interfaz de extensión, arrastre el complemento sin conexión descargado xpath-helper.crx a esta interfaz de extensión, le indicará, simplemente suelte el mouse.
4. Después de que la adición sea exitosa, puede usar la tecla de método abreviado Ctrl + shift + x para llamar a la interfaz para escribir el xpath, presiónelo nuevamente para apagarlo, abra el complemento xpath, mantenga presionada la tecla shift y use la posición del mouse, generará automáticamente para el elemento xpath, copiar y pegar para comer.

Método 2

¿Qué? No importa si es demasiado perezoso para descargar, el navegador proporciona herramientas listas para usar y también es muy fácil de
usar . - "buscar y copiar como elemento xpath
El efecto es el mismo.

renovar

Tener una función de registro no es perfecto. Después de todo, el registro es sensible al tiempo, y no es bueno si el tiempo es demasiado temprano. Si el tiempo llega un minuto tarde, se deducirá el dinero y no se utiliza para el fichaje de empresa los fines de semana!
Primero agregue el archivo de encabezado del módulo de tiempo

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
from time import strftime,asctime,ctime,gmtime,mktime
import datetime

Entonces es para obtener la hora actual y obtener la información del fin de semana.

	# 计算几天的年月日,然后换算成周几,其中周六是5,周日是6,周一是0
	today = datetime.date(int(strftime('%Y',time.localtime(time.time()))),int(strftime('%m',time.localtime(time.time()))),int(strftime('%d',time.localtime(time.time()))))
	print("当前时间:"+ strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
	print("今天是周"+str(today.weekday()+1))
	# 如果不是周六或者周末,那就启动打卡任务
	if(today.weekday()!=5 and today.weekday()!=6):
		do_something()
	else:
		# 更新weekday
		today = datetime.date(int(strftime('%Y',time.localtime(time.time()))),int(strftime('%m',time.localtime(time.time()))),int(strftime('%d',time.localtime(time.time()))))
		print("当前时间:"+ strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
		print("今天是周"+str(today.weekday()+1))
		time.sleep(60*60*24)

Resumir

Para xpaths complejos, copiar y pegar directamente puede hacer que el programa no localice elementos. En este momento, puede ser necesario simplificar las cosas generadas por el ayudante de xpath. Cómo simplificar, por ejemplo,
/html/body/div[@id='container']/div[@id='LoginContainer']/div[@class='e9login-content']/div[@class='e9login-element e9login-btn']/div[@class='e9login-form-submit e9login-submit']/button[@id='submit']
abreviado directamente como
//button[@id='submit']

Ámbito de aplicación: Puede resolver sitios web que no requieren códigos de verificación. Para diferentes secuencias de clics, es bueno modificarlos de acuerdo con las ideas. No es bueno actualizar todo el tiempo. Se puede combinar con la biblioteca de tiempo de Python. para operar el sitio web en un momento específico.

Supongo que te gusta

Origin blog.csdn.net/qq_34935373/article/details/122258973
Recomendado
Clasificación