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

Selenium Web自动化中如何将点击复制获取的字符串保存到变量

核心问题说明
  • getText() 仅能读取元素开闭标签之间的文本节点内容,10分钟邮箱站点的邮箱地址存放在id为mail_address的input输入框中,输入框的显示内容属于value属性,getText() 无法读取该属性值,这是你第一次尝试取值失败的原因。
  • Selenium的click()方法没有业务返回值,执行后只会返回Promise.resolve(undefined),你将点击复制按钮的执行结果赋值给email变量,拿到的永远是空值。另外点击复制按钮是将内容写入操作系统剪贴板,Selenium默认没有系统剪贴板的读取权限,走这条路径需要额外配置浏览器启动参数,稳定性差且实现繁琐,完全没有必要。
修复后的实现代码

直接读取输入框的value属性获取邮箱地址是最稳定的方案,不需要触发复制按钮操作,同时增加等待逻辑避免页面异步渲染导致拿到空值:

const { Builder, By, until } = require('selenium-webdriver');

(async function example() {
  let driver = await new Builder().forBrowser('chrome').build();
  driver.manage().window().maximize();
  try {
    await driver.get('https://10minutemail.com');
    // 定位邮箱输入框元素
    const mailInput = await driver.wait(
      until.elementLocated(By.xpath('//*[@id="mail_address"]')),
      5000,
      '邮箱输入框定位超时'
    );
    // 等待输入框填充完邮箱地址,避免拿到空值
    let email = '';
    await driver.wait(async () => {
      email = await mailInput.getAttribute('value');
      return email && email.includes('@');
    }, 10000, '邮箱地址加载超时');

    // 新开标签页跳转谷歌云
    await driver.switchTo().newWindow('tab');
    await driver.get('https://cloud.google.com/');
    // 定位搜索框传入邮箱值
    const searchbox = await driver.wait(
      until.elementLocated(By.name('q')),
      5000,
      '搜索框定位超时'
    );
    await searchbox.sendKeys(email);
  } finally {
    // 测试完成后可取消注释关闭浏览器
    // await driver.quit();
  }
})();

补充:如果后续场景必须要模拟剪贴板粘贴操作,需要在初始化Chrome驱动时添加启动参数,给对应域名开放剪贴板读写权限,但对于当前需求来说,直接读取元素value传值的方案稳定性远高于剪贴板方案,优先使用前者。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:31:42