Dirección de la publicación del blog: haz clic en mí para ver
Tabla de contenido
Causa
Hace unos días, cuando entré en contacto con crontab en Linux, puedo completar funciones como cambiar el fondo de pantalla y enviar archivos locales a github. En los últimos días, me preguntaba si podía crear una secuencia de comandos de inicio de sesión automático. El rastreador que usé originalmente tomó una cookie para iniciar sesión e iniciar sesión, pero después de unos días la cookie caducó y se enfrió. Por casualidad, aprendí que el selenio puede simular clics del navegador, así que encontré un artículo sobre el registro automático para aprender y lo grabé en este momento.
Introducción al selenio
Selenium es un proyecto integral que proporciona varias herramientas y paquetes de dependencia para la automatización de navegadores web. Tiene muchas funciones. Esta vez, combinada principalmente con Python, la función puede entenderse como un navegador que puede simular un navegador y realizar varios clics, completar contraseñas de cuentas y otras operaciones.
Pon una captura de pantalla
Puntos clave
Lo principal es seleccionar los elementos apropiados y pretender que el código es una persona. Primero debe abrir la página web, luego ingresar el número de cuenta y luego hacer clic en el botón de inicio de sesión. Para el código, debe encontrar el botón de inicio de sesión antes de hacer clic y otras operaciones. Por lo tanto, es muy importante encontrar el correcto y preciso.
Encontrar elemento
Id de paso
driver.find_element_by_id('loginForm')
Por nombre
driver.find_element_by_name('username')
Vía Xpath
#绝对定位 (页面结构轻微调整就会被破坏)
driver.find_element_by_xpath("/html/body/form[1]")
#HTML页面中的第一个form元素
driver.find_element_by_xpath("//form[1]")
#包含 id 属性并且其值为 loginForm 的form元素
driver.find_element_by_xpath("//form[@id='loginForm']")
Para la búsqueda, puede seleccionar un elemento con F12 y hacer clic con el botón derecho y seleccionar Copiar para tener opciones como copiar xpath
Otros puntos
Acción de clic
driver.find_element_by_xpath('/html/body/div[2]/button').click()
Complete la información
driver.find_element_by_id('email').send_keys(username)
Obtener el contenido del elemento
driver.find_element_by_xpath('//*[@id="swal2-content"]').text
Desventaja
Para el selenio, personalmente creo que la mayor desventaja es que es más lento que la velocidad del rastreador. Aunque el código usa operaciones como deshabilitar imágenes y establecer tiempos de espera, sigue siendo relativamente lento. Sin embargo, para el registro automático, no importa mucho si es lento, siempre que pueda ser estable.
Código
"""
功能:自动签到脚本
配置:登录地址 + 账号 + 密码
"""
import time
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.chrome.options import Options
def checkin(login_url,username,password):
chrome_options = Options() #解决使用chrome报错
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument("enable-automation")
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920,1080")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--dns-prefetch-disable")
chrome_options.add_argument("--disable-gpu")
chrome_prefs = {
} #禁止加载图片以提高速度
chrome_options.experimental_options["prefs"] = chrome_prefs
chrome_prefs["profile.default_content_settings"] = {
"images": 2}
chrome_prefs["profile.managed_default_content_settings"] = {
"images": 2}
driver = webdriver.Chrome(options=chrome_options, executable_path='/usr/bin/chromedriver') # 初始化chrome
driver.set_page_load_timeout(30) #设置超时以提高速度
driver.maximize_window() # 最大化窗口
try:
driver.get(login_url) # 进入登录页面
except:
driver.execute_script("window.stop()") #加载超时停止加载执行下一步操作
print("当前页面为:"+driver.find_element_by_xpath('//*[@id="app"]/section/div/div[1]/div/h4/span').text)
print("当前账号为:"+username)
print("--------------------------------")
try:
time.sleep(3) # 延时加载
driver.find_element_by_id('email').send_keys(username) # 填充用户名和密码
driver.find_element_by_id('password').send_keys(password)
driver.find_element_by_xpath('/html/body/div[1]/section/div/div[1]/div/form/div[4]/button').click() # 登录
time.sleep(3)
driver.find_element_by_xpath('/html/body/div[2]/div/div/div[3]/button').click() #点击刚进主页弹出的弹窗
time.sleep(3) #等待两秒,点击read后网页流量是动态增加的
try: # 未签到
driver.find_element_by_xpath("/html/body/div[1]/div/div[3]/section/div[1]/div/div/a").click() # 点击签到
print(driver.find_element_by_xpath('//*[@id="swal2-content"]').text)
driver.find_element_by_xpath("/html/body/div[7]/div/div[3]/button[1]").click()
print("签到成功,恭喜你,幸运的boy")
except Exception as e:
print("已经签到过了")
except Exception as e:
print(e)
print("签到失败")
time.sleep(3)
print("当前流量为:"+driver.find_element_by_xpath("//*[@id='app']/div/div[3]/section/div[3]/div[2]/div/div[2]/div[2]/span").text+"G")
print()
driver.quit()
checkin("url","账号","密码")
checkin("url","账号","密码")
Escribir al final
Lo anterior es solo un resumen personal, solo soy nuevo en contactarme, si hay un error, comuníquese conmigo para corregirlo. Compartiré cosas más interesantes sobre Linux y Python en el futuro.