我正在使用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="{"actiontype":"ACTION","value":"Click","clientside":"true"}"><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();
谢谢!