Selenium login automático da página da web, cartão perfurado (1)


、 Python + Selênio

Selenium é uma ferramenta que usa simulação computacional para operar páginas web de navegadores, que podem realizar automação.Estima-se que muitos pequenos parceiros sabem alguma coisa quando aprendem python. As etapas de instalação também são muito simples:

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

Além da biblioteca de instalação, há também um navegador iniciado pelo programa selenium, portanto, o ambiente de execução do programa precisa instalar o firefoxnavegador e baixá -lo com antecedênciageckodriver

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. Use as etapas

1. Importe a biblioteca

código mostrar como abaixo:

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. Fluxo do programa

  • abra a página da Web;
  • Identifique a localização das caixas de conta e senha e insira a conta e a senha;
  • Simular clique para fazer login
  • Simular soco de clique

3. Código específico

código mostrar como abaixo:

#!/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. Explicação do Código

  1. A partir da função principal, primeiro faça login no site e use seu próprio site, nome de usuário e senha para substituir a parte do código. Normalmente, quando fazemos login manualmente, devido ao problema do cookie, não precisamos repetir a entrada, mas aqui está a chamada ou necessidade de reinserção.
    insira a descrição da imagem aqui

  2. O próximo passo é inserir o número da conta e a senha. Os parâmetros "id" e "loginid" não são universais. Você precisa primeiro fazer login manualmente no site, usar a ferramenta de desenvolvedor F12, visualizar o código-fonte do site, e encontre o rótulo correspondente. Clique com o botão direito do mouse na caixa de login da caixa de login - "marque , você pode ver o código-fonte correspondente. Se você puder ver a tag "id" e o valor correspondente no código, poderá encontrá-lo por id. Da mesma forma, se houver uma tag "name" e o valor correspondente, você também pode usar o nome para localizar. Se não houver nenhum, você também pode encontrá-lo através do Xpath. Para obter detalhes deste método, consulte o descrição na Seção 5. Você não precisa entender nada, e existem ferramentas especiais para ajudar.
    insira a descrição da imagem aqui

  3. A lógica de implementação das caixas de preenchimento de conta e senha deve ser semelhante, e três métodos de posicionamento são fornecidos, tag de identificação, tag de nome e posicionamento aproximado do Xpath.

  4. Quando o programa localiza a caixa de senha da conta por um dos três métodos, o programa precisa nos ajudar a preencher o número da conta e a senha, ou seja, usrName.send_keys(self.__username)epassWrd.send_keys(self.__password)

  5. Após o preenchimento do texto, é natural clicar no botão de login. Desta vez, é utilizado um método diferente, ou seja, o simples e grosseiro Xpath Dafa. O segundo parâmetro na verdade é gerado por uma ferramenta especial, e você pode simplesmente copiar usar
    insira a descrição da imagem aqui

  6. self.__driver.find_element_by_xpath(element).click()O significado desta frase é usar o método correspondente para encontrar o elemento correspondente e concluir a operação de clique.

  7. As restantes operações como clicar e perfurar são os passos específicos do clique.A ordem e o método dos diferentes sites são diferentes, mas para aqueles que apenas precisam de clicar, a lógica implementada é a mesma.

5. Introdução ao uso do Xpath

Método 1

1. Baixe o arquivo xpath-helper.crx, que só pode ser pesquisado online agora, mas não pode ser pesquisado na Loja
2. Encontre o menu de opções "Extensão" no navegador Google ou no navegador Edge.
3. Em seguida, você entrará na interface de extensão, arraste o plugin offline baixado xpath-helper.crx para esta interface de extensão, ele solicitará, basta soltar o mouse.
4. Após a adição ser bem-sucedida, você pode usar a tecla de atalho Ctrl+shift+x para chamar a interface para escrever o xpath, pressione-a novamente para desativá-lo, abra o plug-in xpath, mantenha pressionada a tecla shift e use a posição do mouse, ele gerará automaticamente para o elemento xpath, copie e cole para comer.

Método 2

Que? Não importa se você está com preguiça de baixar, o navegador fornece ferramentas prontas, e também é muito fácil de usar
clique com o botão direito - "inspecionar -" localize o código front-end - "clique com o botão direito - "copiar - "encontre e copie como elemento xpath
O efeito é o mesmo.

renovar

Apenas ter uma função punch-in na verdade não é perfeito. Afinal, o punch-in é sensível ao tempo e não é bom se o tempo for muito cedo. Se o tempo estiver um minuto atrasado, o dinheiro será deduzido e não é usado para o punch-in da empresa nos finais de semana!
Primeiro adicione o arquivo de cabeçalho do módulo de tempo

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

Então é para obter a hora atual e obter as informações do fim 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 complexos, copiar e colar direto pode fazer com que o programa falhe em localizar elementos. Neste momento, pode ser necessário simplificar as coisas geradas pelo auxiliar xpath. Como simplificar, por exemplo,
/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']
diretamente abreviado como
//button[@id='submit']

Âmbito de aplicação: Pode resolver sites que não exigem códigos de verificação. Para diferentes sequências de cliques, é bom modificá-los de acordo com as ideias. Não é bom atualizar o tempo todo. Pode ser combinado com a biblioteca de tempo do Python para operar o site em um horário específico.

Acho que você gosta

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