第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Puppeteer 單擊選擇器

使用 Puppeteer 單擊選擇器

肥皂起泡泡 2023-02-17 10:17:11
所以我在點擊耐克網(wǎng)站上的登錄按鈕時遇到了問題。我不確定為什么它一直崩潰,好吧,因為它找不到我猜的選擇器,但我不確定我做錯了什么。我還想說我在 puppeteer 崩潰之前遇到了某種內(nèi)存泄漏,如果我不及時在控制臺內(nèi)取消進(jìn)程,有時它甚至?xí)刮业?macbook 完全崩潰。編輯:如果我沒有足夠快地取消應(yīng)用程序,此代碼也會在崩潰時導(dǎo)致內(nèi)存泄漏,迫使我不得不硬重置我的 mac。節(jié)點版本:14.4.0 Puppeteer 版本:5.2.1當(dāng)前代碼:const puppeteer = require('puppeteer');(async () => {    const browser = await puppeteer.launch({        headless: false,        defaultViewport: null,        args: ['--start-maximized']    })    const page = await browser.newPage()    await page.goto('https://www.nike.com/')    const winner = await Promise.race([        page.waitForSelector('[data-path="join or login"]'),        page.waitForSelector('[data-path="sign in"]')    ])    await page.click(winner._remoteObject.description)})()我也試過:await page.click('button[data-var]="loginBtn"');
查看完整描述

3 回答

?
白衣非少年

TA貢獻(xiàn)1155條經(jīng)驗 獲得超0個贊

嘗試一下:

await page.click('button[data-var="loginBtn"]');


查看完整回答
反對 回復(fù) 2023-02-17
?
12345678_0001

TA貢獻(xiàn)1802條經(jīng)驗 獲得超5個贊

他們正在對他們的網(wǎng)站進(jìn)行 A/B 測試,因此當(dāng)您從自己的 chrome 瀏覽器訪問該網(wǎng)站時,您可能會登陸一個選擇器與您檢索到的選擇器截然不同的頁面。

在這種情況下,您可以嘗試使用 XPath 及其contains方法通過文本內(nèi)容獲取元素(不幸的是,在這種特定情況下也會更改設(shè)計) 。例如$x('//span[contains(text(), "Sign In")]')[0]

所以我建議檢測兩個按鈕版本并獲得它們最穩(wěn)定的選擇器,這些也可以基于數(shù)據(jù)屬性:

A

$('[data-path="sign in"]')

$('[data-path="join or login"]')

然后使用 aPromise.race你可以檢測到哪個按鈕存在,然后從JSHandle@node這樣的中提取它的選擇器._remoteObject.description::

{

  type: 'object',

  subtype: 'node',

  className: 'HTMLButtonElement',

  description: 'button.nav-btn.p0-sm.body-3.u-bold.ml2-sm.mr2-sm',

  objectId: '{"injectedScriptId":3,"id":1}'

}

=>


button.nav-btn.p0-sm.prl3-sm.pt2-sm.pb2-sm.fs12-nav-sm.d-sm-b.nav-color-grey.hover-color-black

例子:


const browser = await puppeteer.launch({

  headless: false,

  defaultViewport: null,

  args: ['--start-maximized']

})

const page = await browser.newPage()

await page.goto('https://www.nike.com/')

const winner = await Promise.race([

  page.waitForSelector('[data-path="join or login"]'),

  page.waitForSelector('[data-path="sign in"]')

])


await page.click(winner._remoteObject.description)

僅供參考:同時最大化瀏覽器窗口以確保元素具有相同的選擇器名稱。


defaultViewport: null, args: ['--start-maximized']

默認(rèn)情況下,Chromium 在帶有 puppeteer 的小窗口中啟動。


查看完整回答
反對 回復(fù) 2023-02-17
?
素胚勾勒不出你

TA貢獻(xiàn)1827條經(jīng)驗 獲得超9個贊

您需要將{ waitUntil: 'networkidle0' }page.goto

這告訴 puppeteer 等待網(wǎng)絡(luò)空閑(500 毫秒內(nèi)沒有請求)

const puppeteer = require('puppeteer');


(async () => {

    const browser = await puppeteer.launch({

        headless: false,

        defaultViewport: null,

        args: ['--start-maximized']

    })


    const page = await browser.newPage()


    // load the nike.com page and wait for it to fully load (inc A/B scripts)

    await page.goto('https://www.nike.com/', { waitUntil: 'networkidle0' })


    // select whichever element appears first

    var el = await page.waitForSelector('[data-path="join or login"], [data-path="sign in"]', { timeout: 1000 })


    // execute click

    await page.click(el._remoteObject.description)

})()


查看完整回答
反對 回復(fù) 2023-02-17
  • 3 回答
  • 0 關(guān)注
  • 326 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號