[英]How to make sure click is finalized?
我使用以下代碼查詢https://www.genecards.org/cgi-bin/carddisp.pl?gene=BSCL2
#!/usr/bin/env node
// vim: set noexpandtab tabstop=2:
const puppeteer = require('puppeteer');
const fs = require('fs').promises;
const url = process.argv[2];
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
try {
await page.goto(url, { waitUntil: 'networkidle2' });
const content = await page.content();
//console.log(content);
page.on('response', async response => {
console.log("xxx" + response.url());
response.buffer().then(function(data) {
fs.writeFile('/tmp/response.json', data);
//console.log(data);
});
});
const linkHandlers = await page.$x('//div[@data-ga-category = "GeneHancer"]//a[@data-role = "show-all"]');
if (linkHandlers.length > 0) {
await linkHandlers[0].click();
} else {
throw new Error("Link not found");
}
const content1 = await page.content();
//console.log(content1);
} catch (e) {
console.error(e);
process.exit(1);
} finally {
await browser.close();
}
})();
命令就是這樣調用的。
./main.js 'https://www.genecards.org/cgi-bin/carddisp.pl?gene=BSCL2'
但是行console.log("xxx" + response.url());
不叫。
當我取消注釋//console.log(content1);
,可以打印 url https://www.genecards.org/gene/api/data/Enhancers?geneSymbol=BSCL2
。 但是打印的內容沒有GeneHancer (GH) Regulatory Elements for BSCL2 Gene
表中顯示的所有條目。
我認為click()
的效果還沒有完全發生。 如何等待它完全更新網頁? 以及如何在收到響應后顯示https://www.genecards.org/gene/api/data/Enhancers?geneSymbol=BSCL2
的內容?
單擊鏈接后,您可以檢查加載范圍是否可見。 如果是這樣,您可以等到它被隱藏。 它可能是這樣的:
if ((await page.$$('#enhancerControllerComponent > div > div.ng-scope > div > div:nth-child(2) > span.gc-loading:not(.ng-hide)')).length) {
await page.waitForSelector('#enhancerControllerComponent > div > div.ng-scope > div > div:nth-child(2) > span.gc-loading.ng-hide'));
}
您可能需要改進這些選擇器。 但這就是想法。 檢查加載 state 是否可見,等待隱藏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.