最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

无法在 Puppeteer 上查询选择器(类型错误:selector.startsWith 不是函数)

网站源码admin32浏览0评论

无法在 Puppeteer 上查询选择器(类型错误:selector.startsWith 不是函数)

无法在 Puppeteer 上查询选择器(类型错误:selector.startsWith 不是函数)

我安装了 Puppeteer 并想查询一个选择器来处理它。 但是我遇到了

TypeError: selector.startsWith is not a function
错误。

我试图通过添加

toString()
更改核心代码来修复它,但它没有用。

这是我试过的两种表达方式:

await page.$eval('#firstName', elem => elem.click());
await page.waitForSelector('#firstName');

两者均无效并产生相同的错误。

我还尝试安装旧的 puppeteer 和 node 版本,但仍然相同。 我该如何解决这个问题?

所有错误日志信息为:

file:///C:/Users/User/Desktop/mail/node_modules/puppeteer-core/lib/esm/puppeteer/common/GetQueryHandler.js:51
                if (selector.startsWith(prefix)) {
                             ^

TypeError: selector.startsWith is not a function
    at getQueryHandlerAndSelector (file:///C:/Users/User/Desktop/mail/node_modules/puppeteer-core/lib/esm/puppeteer/common/GetQueryHandler.js:51:30)
    at CDPElementHandle.$ (file:///C:/Users/User/Desktop/mail/node_modules/puppeteer-core/lib/esm/puppeteer/common/ElementHandle.js:74:51)
    at IsolatedWorld.$ (file:///C:/Users/User/Desktop/mail/node_modules/puppeteer-core/lib/esm/puppeteer/common/IsolatedWorld.js:126:25)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async IsolatedWorld.focus (file:///C:/Users/User/Desktop/mail/node_modules/puppeteer-core/lib/esm/puppeteer/common/IsolatedWorld.js:186:24)
    at async file:///C:/Users/User/Desktop/mail/index.js:17:5

我产生相同错误的完整代码示例是:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({headless: false});
  const context = await browser.createIncognitoBrowserContext();
  if (context) {
    const page = await browser.newPage();

    await page.goto(';cc=TR&dsh=S-519439412%3A1682412535258329&flowEntry=SignUp');
  
    // Set screen size
    await page.setViewport({width: 1080, height: 1024});
    //await page.$eval('#firstName', elem => elem.click());
    const username = await page.waitForSelector('#firstName');
    await page.focus(username)
    await page.keyboard.type('test54')
  }

})();
回答如下:

您需要单击选择器

#firstName
所以只需更改

await page.focus(username);

await username.click();

这将解决错误,如果你想使用隐身,那么

const page = await browser.newPage();

应该是

const page = await context.newPage();
发布评论

评论列表(0)

  1. 暂无评论