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

使用selenium-webdriver时setInterval回调中await报语法错误求助

问题分析与解决方案

首先,你遇到的SyntaxError: Unexpected identifier并不是driver变量的作用域问题,核心原因是你在setInterval的回调函数里使用了await,但这个回调函数没有被声明为async函数——JavaScript明确规定,只有在async标记的函数内部,才能使用await关键字,否则会直接抛出语法错误。

另外还有一个容易忽略的隐藏问题:你的finally块里直接调用了await driver.quit(),但setInterval是异步执行的,example函数会在启动定时器后立刻走到finally逻辑,导致浏览器被提前关闭,后续定时器里的driver操作都会直接失败。

具体修复步骤

1. 给setInterval回调添加async声明

把回调函数改成async () => {...}的形式,这样内部的await就能被正常识别了。

2. 调整driver.quit的执行时机

不能在example函数的finally里直接关闭浏览器,否则定时器还没开始工作就丢失了驱动实例。你可以设置一个终止条件(比如运行N次后停止),或者在需要结束任务时再主动调用driver.quit()。

3. 别忘了给getAttribute也加await

image.getAttribute('src')本身也是异步操作,返回的是Promise对象,必须用await才能拿到实际的src字符串值。

修复后的完整代码

const {Builder, By, Key, until} = require('selenium-webdriver'); 
var firefox = require('selenium-webdriver/firefox'); 
var FirefoxProfile = require('firefox-profile'); 

FirefoxProfile.copyFromUserProfile({name: 'foobar'}, function(err, profile) { 
  var opts = new firefox.Options(); 
  opts.setProfile(profile.profileDir); 

  (async function example() { 
    let driver = await new Builder().forBrowser('firefox').setFirefoxOptions(opts).build(); 
    try { 
      await driver.get('http://google.com'); 
      var myTimer = setInterval(async () => { // 给回调添加async声明
        try {
          var image = await driver.findElement(By.xpath("//img")); 
          var imageSrc = await image.getAttribute('src'); // 这里也要加await
          console.log('当前图片src:', imageSrc);
        } catch(timerErr) {
          console.log('定时器执行出错:', timerErr);
        }
      }, 1000*10); 

      // 示例:运行5次后自动停止并关闭浏览器
      setTimeout(() => {
        clearInterval(myTimer);
        driver.quit().then(() => console.log('浏览器已关闭'));
      }, 1000*10*5);
    } catch(err) { 
      console.log('初始化过程出错:', err); 
      await driver.quit();
    } 
  })(); 
}); 

额外提示

给定时器的回调单独加上try/catch很重要,这样就算某次获取图片的操作失败,也不会导致整个定时器停止工作,程序的鲁棒性会更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:22:52