使用Selenium JavaScript获取Google页面标题遇[object Promise]错误求助
解决Selenium获取页面标题返回[object Promise]的问题
嘿,我一眼就看出问题啦——你遇到的[object Promise]是因为Selenium WebDriver的几乎所有方法(包括executeScript())都是异步的,它们返回的是Promise对象,而不是直接的结果值。你直接把这个Promise对象和字符串拼接打印,自然就会输出这个奇怪的结果啦。
下面给你几种靠谱的解决办法:
方法1:使用async/await(推荐)
这是现代JavaScript处理异步操作最清晰的方式,把代码放在async函数里,用await等待Promise完成:
const { Builder, By, Key, until } = require('selenium-webdriver'); async function getGoogleTitle() { let driver; try { driver = await new Builder().forBrowser('internet explorer').build(); await driver.get("https://www.google.com/"); // 方式A:用executeScript并await结果 const title = await driver.executeScript("return document.title;"); console.log("Title: " + title); // 方式B:其实Selenium有专门的getTitle方法,更简洁! // const title = await driver.getTitle(); // console.log("Title: " + title); } catch (error) { console.error("出错啦:", error); } finally { if (driver) { await driver.quit(); // 记得关闭驱动,避免残留进程 } } } getGoogleTitle();
方法2:使用Promise的.then()回调
如果你不想用async函数,也可以通过Promise的then方法来处理异步结果:
const { Builder, By, Key, until } = require('selenium-webdriver'); new Builder().forBrowser('internet explorer').build() .then(driver => { return driver.get("https://www.google.com/") .then(() => driver.executeScript("return document.title;")) .then(title => { console.log("Title: " + title); return driver.quit(); }) .catch(error => { console.error("出错啦:", error); return driver.quit(); }); });
另外提醒一下:IE浏览器的WebDriver配置相对麻烦,可能需要额外设置IE驱动的兼容性(比如启用保护模式一致、设置缩放级别为100%),如果运行时遇到其他错误,记得检查这些配置哦。
内容的提问来源于stack exchange,提问作者Melissa
相关产品推荐
相关产品推荐

