You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需使用Selenium实现含内嵌JavaScript网页的自动化登录

解决方案

方案1:用PyWebView调用系统内置WebView(无需额外驱动)

PyWebView依赖系统原生Web组件(Windows 10/11默认自带Edge WebView2,旧版本可打包离线runtime),不需要单独下载浏览器驱动,也不受Chrome版本推送影响。它能直接执行页面JS、模拟用户交互。

示例代码:

import webview
import time

def login():
    # 输入用户名
    webview.windows[0].evaluate_js("document.getElementById('username').value = 'your_username';")
    # 触发用户名校验(比如点击下一步按钮)
    webview.windows[0].evaluate_js("document.getElementById('next-btn').click();")
    # 等待密码页面加载
    time.sleep(2)
    # 输入密码并提交登录
    webview.windows[0].evaluate_js("document.getElementById('password').value = 'your_password';")
    webview.windows[0].evaluate_js("document.getElementById('login-btn').click();")

if __name__ == '__main__':
    webview.create_window("Login", "https://your-login-page-url.com")
    webview.start(login)

部署时,可将WebView2离线runtime打包进应用目录,确保目标电脑能正常调用。

方案2:逆向JS登录逻辑,直接构造HTTP请求

网页的JS校验最终会和后端交互,在开发机上抓包分析完整流程:

  • 用Chrome开发者工具Network标签,记录输入用户名后触发的校验请求(如POST /check-username)
  • 记录密码页面加载后,提交登录的请求(如POST /login)
  • 提取请求头、Cookie、JS生成的token/signature等参数

用Requests直接构造请求,无需执行JS:

import requests

session = requests.Session()

# 获取初始Cookie
session.get("https://your-login-page-url.com")

# 提交用户名校验
check_data = {
    "username": "your_username",
    "csrf_token": session.cookies.get("csrf_token")  # 从页面或Cookie提取token
}
session.post("https://your-login-page-url.com/check-username", data=check_data)

# 提交密码登录
login_data = {
    "username": "your_username",
    "password": "your_password",
    "csrf_token": session.cookies.get("csrf_token")
}
response = session.post("https://your-login-page-url.com/login", data=login_data)

# 验证登录状态
if response.status_code == 200 and "登录成功" in response.text:
    print("登录成功")

该方案无需浏览器环境,只要目标电脑能访问登录服务器即可。

方案3:使用离线版PhantomJS

PhantomJS是无头浏览器,不依赖Chrome,可将其二进制文件(如phantomjs.exe)和脚本一起打包部署,避免下载和版本问题。

示例代码:

from selenium import webdriver

# 指定本地PhantomJS路径
driver = webdriver.PhantomJS(executable_path="./phantomjs.exe")
driver.get("https://your-login-page-url.com")

# 输入用户名并触发校验
driver.find_element_by_id("username").send_keys("your_username")
driver.find_element_by_id("next-btn").click()

# 等待密码页面加载
driver.implicitly_wait(5)

# 输入密码并提交
driver.find_element_by_id("password").send_keys("your_password")
driver.find_element_by_id("login-btn").click()

# 验证登录
if "登录成功" in driver.page_source:
    print("登录成功")

driver.quit()

注:PhantomJS虽已停止维护,但对常规JS场景仍能正常工作,适合离线部署。

内容的提问来源于stack exchange,提问作者gunterl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 02:50:17