Selenium trabaja con crontab para realizar el registro automático

Dirección de la publicación del blog: haz clic en mí para ver

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

Inserte la descripción de la imagen aquí

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.

Supongo que te gusta

Origin blog.csdn.net/zss192/article/details/105574863
Recomendado
Clasificación