即使选择器返回命中值,也无法点击元素

时间:2019-10-15 19:53:30

标签: node.js puppeteer

我正在使用Node和Puppeteer来自动化第三方Web应用程序。一切正常,直到脚本尝试单击锚标记(请参见下面的HTML摘录)。

此元素具有一个id(“ ____ca”),并且waitForSelector()可以找到它,但是使用相同的选择器调用“ click()”方法不会执行任何操作(无错误-无)。

此锚点位于一个跨度内,而该跨度本身又位于另一个跨度内,因此我尝试单击这两个结果均相同,即没有任何反应。

奇怪的是,如果您在此页面上打开调试器并使用“ document.querySelector('#____ ca')。click()”,它将起作用。那么,为什么它在Puppeteer中不起作用?

这是HTML:

<a role="button" ct="Button" rel="tooltip" title="Give a badge" aria-label="Please Select Give a badge" data-toggle="cso-button" id="____ca" class="cso-btn cso-btn cso-action cso-corner cso-btn-grey   cso-btn-icon-icon-award  " href="javascript:void(0)" data-ctl-options="{&quot;actiontype&quot;:&quot;ACTION&quot;,&quot;value&quot;:&quot;Click&quot;,&quot;clientside&quot;:&quot;true&quot;}"><span class="cso-icon cso-btn-icon-award" style="margin-right:3px;"></span></a>

以下是整个程序:

const puppeteer = require('puppeteer');
const url = '*************************************';

async function run() {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    await page.goto(url);

    await page.$eval('#userNameBox', el => el.value = '*****');
    await page.$eval('#passWordBox', el => el.value = '*****')
    await page.click("#submit");

    await page.waitForSelector('.search-lnk');
    await page.click('.search-lnk');

    await page.waitForSelector('#ctl00_ContentPlaceHolder1_rptSearchEngines_ctl02_hlSearchEngine');
    await page.click('#ctl00_ContentPlaceHolder1_rptSearchEngines_ctl02_hlSearchEngine');

    await page.waitForSelector('#ctl00_ContentPlaceHolder1_txtsearch');
    await page.type('#ctl00_ContentPlaceHolder1_txtsearch', 'XYZ123');

    await page.click('.bd');

    await page.waitForSelector('#ctl00_ctl00_ctl00_lnkFullName');
    await page.click('#ctl00_ctl00_ctl00_lnkFullName');

    await page.waitForSelector('[data-tag="Feedback"]');
    await page.click('[data-tag="Feedback"]');

    await page.bringToFront();

    await page.waitForSelector('#____bm_508');
    await page.type('#____bm_508', 'Thank you for attending this conference!');

    await page.waitForSelector('#____ca');
    await page.click('#____ca');

    //browser.close();
}

run();

谢谢!

0 个答案:

没有答案