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

Playwright中ExcelJS读取的salary变量未定义的作用域问题

解决"salary is not defined"错误的方案

问题根源

  1. 变量作用域限制:原代码中salary是在wb.xlsx.readFile().then()的回调函数内部定义的局部变量,外部的async函数无法访问这个变量。
  2. 异步执行顺序问题:Excel文件读取是异步操作,而Playwright的浏览器自动化代码会先执行,此时salary还未被定义或赋值。

修正后的代码

const { chromium } = require("playwright");
const ExcelJS = require('exceljs');

(async () => {
  // 读取Excel文件并获取salary值
  const wb = new ExcelJS.Workbook();
  const fileName = 'Book1.xlsx';
  let salary;
  try {
    await wb.xlsx.readFile(fileName);
    const ws = wb.getWorksheet('RenM1ACont');
    salary = Number(ws.getCell('I69').value.result).toFixed(0).toString();
    console.log(salary);
  } catch (err) {
    console.log(err.message);
    // 读取失败时可提前退出或做其他处理
    return;
  }

  // 启动浏览器并执行自动化操作
  const browser = await chromium.launch({
    headless: false,
  });
  const page = await browser.newPage();

  await page.goto("https://someweb");

  await page.getByTitle('Field1').fill("123");
  await page.getByTitle('Field2').fill("1971");

  await page.getByTitle('name.').fill(salary);

  // 按需关闭浏览器
  // await browser.close();
})();

关键改动说明

  • 将Excel读取逻辑移入主async函数,确保salary变量在整个函数作用域内可访问。
  • 使用await替代.then()回调,统一异步代码风格,保证Excel读取完成后再执行Playwright的自动化操作。
  • 添加try/catch块处理Excel读取可能出现的错误,避免程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 23:27:33