Logo of Lexmount
文档模板博客帮助中心
GitHub
Logo of LexmountLexmount Browser

开始使用

Lexmount 文档
控制台使用指南

Browser

Web Fetch

概览快速开始
常见错误

Web Search

概览快速开始搜索接口

运行时

概览快速开始接口能力示例

帮助与计费

能力名词 FAQ
更新日志联系支持

接口能力

JavaScript 运行环境、远程文件与进程、HTTP/TCP、云浏览器接口及权限要求。

JavaScript 运行环境

任务代码按 ES module 执行,支持顶层 await 和动态 import()。提交 JavaScript 源码,使用精确的内置模块名 lexmount:remote、lexmount:browser。不提供 npm 包解析、CommonJS、Node.js 内置模块或业务 TypeScript 转译;编辑器的类型补全不代表能够直接提交 TypeScript。

能力常用接口
HTTP 请求与响应fetch、Request、Response、Headers、FormData、Blob、File
URL 处理URL、URLSearchParams、URLPattern
字节、编码与流TextEncoder、TextDecoder、ReadableStream、WritableStream、TransformStream、CompressionStream
异步与取消setTimeout、setInterval、queueMicrotask、AbortController、AbortSignal
其他 Web APIcrypto / WebCrypto、WebSocket 客户端、structuredClone、atob / btoa、事件基础类型
日志与参数console.log/info/warn/error/debug;任务模式下 jsd.args 为空数组

全局 fetch 从云端运行环境发起 HTTP(S) 请求,仅允许公网目标;域名解析和重定向也受该限制。访问客户端本机或内网服务应使用下文的 host.fetch,请求从所选客户端发出。

所有活动资源结束后任务完成。HTTP 服务、定时器和网络任务可保持执行活动;孤立且未被等待的 Promise 不会独立保持任务存活。每次重运行使用新的 JavaScript 环境,不保留上一轮的全局变量。

远程客户端

打开客户端管理

import { getRemoteHosts, remoteHosts } from 'lexmount:remote';

const hosts = await getRemoteHosts();
console.log(hosts);
const info = hosts.find((item) => item.id === '<client-id>');
if (!info) throw new Error('Client is offline or unavailable');
const host = remoteHosts[info.id];
console.log(host.id);

getRemoteHosts() 返回在线主机信息,并刷新只读的 remoteHosts 映射。主机信息包括 id、os、osVersion、hostname、uptimeSeconds、cpuModel、totalMemoryBytes、totalDiskBytes,不可采集的字段为 null。首次导入模块也可能查询主机并失败,需将动态导入放入 try/catch 才能捕获导入阶段错误。

以下方法均为异步操作,流与迭代器按需读取。需要先启动原生客户端,并将示例中的 <client-id> 替换为当前用户的客户端 ID。

文件系统

方法结果与用途
host.fs.readFile(path)Promise<Uint8Array>,读取完整文件
host.fs.readTextFile(path)Promise<string>,按 UTF-8 解码
host.fs.readDir(path)AsyncIterableIterator<DirEntry>,逐条读取目录
host.fs.stat(path)文件类型、字节大小与 mtime / atime / birthtime(Date 或 null)
host.fs.writeFile(path, bytes, options?)写入 Uint8Array
host.fs.writeTextFile(path, text, options?)按 UTF-8 写入文本
host.fs.mkdir(path, { recursive? })创建目录,默认不递归
host.fs.remove(path, { recursive? })删除文件或目录,默认不递归

路径使用客户端操作系统的原生语法,相对路径以客户端启动目录为基准。目录项提供 name、isFile、isDirectory、isSymlink;退出 for await 会关闭目录游标。写选项默认为 { create: true, append: false },不会自动创建父目录;分块写入失败不会回滚已写数据。完整文件读取和写入需要相应内存。

HTTP 请求

host.fetch(input, options?) 从客户端发出请求,返回原生 Response,可用 status、headers、text()、json() 或流式 body。

选项行为
method默认 GET;GET / HEAD 不能带正文
headersHeadersInit,可传请求头对象或 Headers
bodystring、Uint8Array、ArrayBuffer 或 null;不支持 FormData 和上传流
signalAbortSignal,可取消请求和响应读取
redirectfollow(默认)、manual 或 error

允许客户端可达的 HTTP(S) 来源,包括本机与内网,没有独立的 fetch 权限开关。HTTP 4xx / 5xx 正常返回 Response,由代码检查 response.ok;网络失败会抛错。响应正文应读完或取消,释放远端资源。跨源重定向移除认证和 Cookie 等敏感头,不自动维护 Cookie Jar。

进程

方法结果与用途
host.process.list()进程快照异步迭代器,按 PID 排序,退出迭代释放快照
host.process.get(pid)ProcessInfo 或 null
host.process.exec(command)执行 shell 命令,自动发送 stdin EOF,返回退出状态及完整 stdout / stderr 字节
host.process.spawn(command)返回带流式 stdin / stdout / stderr、status Promise 和 kill() 的子进程

ProcessInfo 包含 PID、父 PID、名称、可执行路径、命令行、状态、开始时间、CPU 使用率和内存字节数,不可用字段为 null。exec() 的非零退出码通过 exitCode 返回,不自动抛错。

命令继承客户端的工作目录、环境和系统用户权限。Linux / macOS 使用 /bin/sh -c,Windows 使用 cmd.exe /d /s /c,命令语法需适配目标系统。spawn() 应并发消费 stdout 和 stderr,写完 stdin 后关闭 writer 发送 EOF;只等待 status 可能因输出管道未排空而阻塞。

TCP

方法或对象用途
host.tcp.connect({ hostname?, port })从客户端连接 TCP;默认主机 127.0.0.1,端口 1~65535
host.tcp.listen({ hostname?, port? })在客户端监听;默认 127.0.0.1:0,端口 0 自动分配
TcpConnectionlocalAddr、remoteAddr、字节流 readable / writable、closed 和 close()
TcpListeneraddr、accept()、异步迭代、finished 和 close()

连接的 writable 关闭表示仅发送写 EOF,close() 关闭整个连接;取消 readable 也关闭整个连接。监听器一次只能有一个待完成的 accept();关闭监听器不关闭已接入连接,退出监听迭代会关闭监听器。

客户端 HTTP 服务

host.http.serve({ hostname?, port?, fetch(request) }) 在客户端监听明文 HTTP/1.1,默认 127.0.0.1:8080,port: 0 自动分配端口。处理函数在云端 JavaScript 环境中执行,接收 Request 并返回 Response。

返回对象提供 addr、finished 和 shutdown()。关闭服务会停止接入并等待已有响应结束;不要从正在处理的请求内等待自身的 shutdown()。该接口不会产生公开任务 URL;对外发布使用默认导出 HTTP 入口。

客户端权限

在客户端管理中点击「配置」,调整开关并点击「保存」。首次连接的默认配置为:

{
  "fs": { "enabled": true, "allow_write": false },
  "process": { "enabled": true, "allow_exec": true },
  "tcp": { "enabled": true },
  "http_server": { "enabled": true }
}

fs.enabled 控制文件接口读取,写入另需 allow_write;process.enabled 控制进程查询,执行另需 allow_exec。fs.allow_write=false 只限制文件 API,已允许的 shell 命令仍可以修改文件。文件读取遵循操作系统用户权限,没有额外路径白名单。tcp.enabled 和 http_server.enabled 分别控制 TCP 与 HTTP 监听。

配置按用户和客户端 ID 保存,不以 project 隔离。离线也能保存,新配置在重连后同步;以客户端确认的版本判断是否已应用。更新影响后续操作,已开始的操作继续,关闭与清理始终允许。

云浏览器

import browser from 'lexmount:browser';

const session = await browser.create({ browserMode: 'normal' });
try {
  const page = await session.openUrl('https://example.com');
  console.log(page.title);
} finally {
  await session.destroy();
}

浏览器身份由本次任务提交注入,代码不需要填写 API key。参数使用 camelCase,返回的会话元数据使用 snake_case,不返回凭据或 CDP 地址。

管理接口用途
browser.create(options?)创建并等待会话可用,返回 BrowserSession
browser.get(sessionId, { regionId?, timeoutMs? })接入已有会话,不取得自动销毁所有权
browser.list({ status?, regionId?, timeoutMs? })查询会话,status 为 active 或 closed
browser.destroy(sessionId, options?)关闭指定会话

创建选项包括 browserMode(normal / light)、regionId、contextId、contextMode(read_write / read_only)、contextDescription、weakLock、officialProxy、localProxyTunnelId、customImageId、windowSize、downloads、recording、extensionIds 和 timeoutMs。具体能力由项目权益和浏览器类型决定,Moli 不支持持久化回放。

会话方法用途与返回值
getInfo(options?)会话状态和元数据
targets(options?)页面列表,含 id、type、title、url
keepalive({ intervalMs?, durationMs?, stopOnInactive?, timeoutMs? })定期检查会话,返回检查次数与快照
destroy(options?)等待后端确认关闭
openUrl(url, options?)导航,返回 navigation、url、title
eval(expression, options?)执行页面表达式,返回 JSON 值
waitSelector(selector, options?)等待选择器匹配
waitText(text, options?)等待文本条件;未达到返回 timed_out: true
click(selector, options?)点击元素
fill(selector, value, options?)填写输入框
screenshot({ fullPage?, targetId?, timeoutMs? })PNG 字节 Uint8Array
pdf({ printBackground?, targetId?, timeoutMs? })PDF 字节 Uint8Array
snapshot(options?)页面快照 JSON
raw(method, params?, options?)调用底层浏览器方法,返回 JSON

页面操作可传 targetId 稳定选择同一页面;省略时选择第一个页面,没有页面时创建空白页。waitText 另支持 selector、state(present / absent)、exact、caseSensitive、includeHidden、pollMs。

所有时间参数单位为毫秒,timeoutMs 为 1~86400000 的整数。默认创建超时 600000ms,页面操作 30000ms,关闭确认 180000ms。create() 创建的会话在任务结束时会尝试回收,仍建议 try/finally 显式销毁;get() 接入的已有会话需按使用方安排关闭。

错误处理与类型声明

远程和浏览器错误是带 name、code 的 Error 对象,例如 RemoteFsError、RemoteFetchError、BrowserError;这些名字不是导出的构造函数,按 error.code 判断原因。网络断开、权限关闭和客户端离线均可能导致远程调用失败。

编辑器加载的声明也可供本地开发使用:jsd.d.ts、remote.d.ts、browser.d.ts。将三份文件放在同一目录,并引用 jsd.d.ts。声明借用 TypeScript 的 WebWorker 类型提供补全,实际支持范围以本页及运行时为准。

快速开始

在网页中创建实例、运行 JavaScript、查看日志,并连接自己的电脑或服务器。

示例

可复制的 JavaScript 示例,覆盖公开 HTTP 服务、远程文件、内网请求、进程、TCP 和云浏览器。

目录

JavaScript 运行环境
远程客户端
文件系统
HTTP 请求
进程
TCP
客户端 HTTP 服务
客户端权限
云浏览器
错误处理与类型声明

问题没有解决?