怎样实现自动登录脚本

wen 实用脚本 21

本文目录导读:

怎样实现自动登录脚本

  1. 使用 Selenium(Web 自动化)
  2. 使用 Requests(API 模拟登录)
  3. 使用 PyAutoGUI(桌面应用控制)
  4. 使用 Playwright(现代自动化框架)
  5. 配置文件管理(安全建议)
  6. 完整示例(带错误处理)
  7. 安全建议

使用 Selenium(Web 自动化)

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 初始化浏览器
driver = webdriver.Chrome()
try:
    # 访问登录页面
    driver.get("https://example.com/login")
    # 等待页面加载
    time.sleep(2)
    # 填写用户名和密码
    username_input = driver.find_element(By.ID, "username")
    password_input = driver.find_element(By.ID, "password")
    username_input.send_keys("your_username")
    password_input.send_keys("your_password")
    # 点击登录按钮
    login_button = driver.find_element(By.ID, "login-btn")
    login_button.click()
    # 等待登录完成
    time.sleep(3)
finally:
    driver.quit()

使用 Requests(API 模拟登录)

import requests
# 创建会话
session = requests.Session()
# 登录信息
login_data = {
    "username": "your_username",
    "password": "your_password",
    "_token": ""  # 可能需要CSRF token
}
# 发送POST请求登录
login_url = "https://example.com/api/login"
response = session.post(login_url, data=login_data)
if response.status_code == 200:
    print("登录成功!")
    # 使用已登录的会话访问其他页面
    profile_response = session.get("https://example.com/profile")
    print(profile_response.text)

使用 PyAutoGUI(桌面应用控制)

import pyautogui
import time
# 等待手动打开应用
time.sleep(5)
# 定位并点击用户名输入框
username_field = pyautogui.locateOnScreen('username_field.png')
if username_field:
    pyautogui.click(username_field)
    pyautogui.typewrite('your_username', interval=0.1)
    # 按Tab键移动到密码框
    pyautogui.press('tab')
    pyautogui.typewrite('your_password', interval=0.1)
    # 提交登录
    pyautogui.press('enter')

使用 Playwright(现代自动化框架)

from playwright.sync_api import sync_playwright
with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    # 访问登录页面
    page.goto("https://example.com/login")
    # 填写表单
    page.fill("#username", "your_username")
    page.fill("#password", "your_password")
    # 点击登录
    page.click("#login-btn")
    # 等待页面跳转
    page.wait_for_url("**/dashboard")
    browser.close()

配置文件管理(安全建议)

import json
import os
from cryptography.fernet import Fernet
class LoginManager:
    def __init__(self, config_file="credentials.json"):
        self.config_file = config_file
        self.key_file = "secret.key"
    def generate_key(self):
        """生成加密密钥"""
        key = Fernet.generate_key()
        with open(self.key_file, "wb") as key_file:
            key_file.write(key)
    def save_credentials(self, username, password):
        """加密保存凭据"""
        # 加载密钥
        with open(self.key_file, "rb") as f:
            key = f.read()
        cipher = Fernet(key)
        # 加密密码
        encrypted_password = cipher.encrypt(password.encode())
        # 保存到文件
        credentials = {
            "username": username,
            "password": encrypted_password.decode()
        }
        with open(self.config_file, "w") as f:
            json.dump(credentials, f)
    def load_credentials(self):
        """加载并解密凭据"""
        # 读取配置文件
        with open(self.config_file, "r") as f:
            credentials = json.load(f)
        # 加载密钥
        with open(self.key_file, "rb") as f:
            key = f.read()
        cipher = Fernet(key)
        # 解密密码
        username = credentials["username"]
        password = cipher.decrypt(credentials["password"].encode()).decode()
        return username, password

完整示例(带错误处理)

import time
import logging
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.common.exceptions import TimeoutException, NoSuchElementException
logging.basicConfig(level=logging.INFO)
class AutoLogin:
    def __init__(self, username, password, url):
        self.username = username
        self.password = password
        self.url = url
        self.driver = None
    def setup_driver(self):
        """初始化浏览器驱动"""
        options = webdriver.ChromeOptions()
        options.add_argument('--headless')  # 无头模式
        self.driver = webdriver.Chrome(options=options)
    def login(self):
        """执行登录"""
        try:
            self.setup_driver()
            self.driver.get(self.url)
            # 等待登录表单加载
            wait = WebDriverWait(self.driver, 10)
            # 定位元素
            username_input = wait.until(
                EC.presence_of_element_located((By.ID, "username"))
            )
            password_input = self.driver.find_element(By.ID, "password")
            login_button = self.driver.find_element(By.ID, "login-btn")
            # 填写登录信息
            username_input.clear()
            username_input.send_keys(self.username)
            password_input.clear()
            password_input.send_keys(self.password)
            # 点击登录
            login_button.click()
            # 等待登录完成
            time.sleep(3)
            logging.info("登录成功!")
            return True
        except TimeoutException:
            logging.error("登录超时")
            return False
        except NoSuchElementException as e:
            logging.error(f"找不到元素: {e}")
            return False
        finally:
            if self.driver:
                self.driver.quit()
# 使用示例
if __name__ == "__main__":
    auto_login = AutoLogin("username", "password", "https://example.com/login")
    success = auto_login.login()
    if success:
        print("登录成功")
    else:
        print("登录失败")

安全建议

  1. 不要硬编码密码:使用环境变量或加密配置文件
  2. 使用虚拟环境:隔离项目依赖
  3. 添加重试机制:处理网络波动
  4. 设置超时时间:避免无限等待
  5. 处理Cookies:保存会话状态
  6. 避免触发反爬:设置合理的等待时间

选择哪种方法取决于你的具体需求:Web应用用Selenium/Playwright,API接口用Requests,桌面应用用PyAutoGUI。

抱歉,评论功能暂时关闭!