【问题标题】:Can't find selectors when headless is enabled - Puppeteer启用无头时找不到选择器 - Puppeteer
【发布时间】:2021-03-23 23:46:38
【问题描述】:

我使用无头记录器扩展创建了一个简单的 puppeteer 脚本,但是当我运行它时它不起作用。

TimeoutError: waiting for selector `.a-button-stack > #atc-declarative > #submit.add-to-cart #add-to-cart-button` failed: timeout 30000ms exceeded

我也尝试过自己检查元素。因此,如果您转到该亚马逊网址并检查按钮,我尝试了以下操作,但总是超时。

await page.waitForSelector('#add-to-cart-button')

await page.waitForSelector('.a-button-stack')

await page.waitForSelector('.a-button-input a-declarative')

启用无头时如何找到正确的选择器?必须有一种方法,否则无头浏览器将如何导航。我猜这个从headless-recorder chrome 扩展生成的脚本是在 headless 设置为 false 时使用的。不过我可能是错的。目标很简单。进入亚马逊产品页面,点击添加到购物车,然后点击查看购物车。感谢您的帮助!

amazon.js

const puppeteer = require('puppeteer');
const randomUseragent = require('random-useragent');

(async () => {
    const browser = await puppeteer.launch()
    const page = await browser.newPage()

    const navigationPromise = page.waitForNavigation()

    await page.goto('https://www.amazon.com/Amazon-Essentials-Full-Zip-Hooded-Sweatshirt/dp/B075JW9CYR?ref_=Oct_DLandingS_D_cf757c44_63&smid=ATVPDKIKX0DER&th=1&psc=1')

    await page.setViewport({ width: 1920, height: 969 })

    await page.waitForSelector('.a-button-stack > #atc-declarative > #submit\.add-to-cart #add-to-cart-button')
    await page.click('.a-button-stack > #atc-declarative > #submit\.add-to-cart #add-to-cart-button')

    await navigationPromise

    await page.waitForSelector('.nav-right > #nav-tools > #nav-cart #nav-cart-count')
    await page.click('.nav-right > #nav-tools > #nav-cart #nav-cart-count')

    await navigationPromise

    await browser.close()
})()

【问题讨论】:

    标签: node.js puppeteer


    【解决方案1】:

    试试:

    await page.goto('https://www.amazon.com/Amazon-Essentials-Full-Zip-Hooded-Sweatshirt/dp/B075JW9CYR?ref_=Oct_DLandingS_D_cf757c44_63&smid=ATVPDKIKX0DER&th=1&psc=1')
    await page.waitForFunction('document.querySelector("body")');
    

    【讨论】:

    • 如果我只添加它,那么它就可以了。我怎样才能进一步深入研究?如果我在await page.waitForSelector('.a-button-stack > #atc-declarative > #submit\.add-to-cart #add-to-cart-button') 之后添加它,它会失败。我也尝试从正文await page.waitForFunction('document.querySelector("body > .a-button-stack > #atc-declarative > #submit\.add-to-cart #add-to-cart-button")'); 向下钻取,但失败了。
    • 尝试一个简单的,看看是否有效:await page.waitForSelector('.a-button-stack');
    • 非常感谢!
    • 很高兴为您提供帮助:)
    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 2022-06-16
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多