javascript - 如何确保点击完成?
问题描述
我使用以下代码查询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'));
}
您可能需要改进这些选择器。但这就是想法。检查加载状态是否可见并等待它被隐藏。
推荐阅读
- java - 是否有一个 Maven 插件可以告诉我单个依赖项的版本?
- javascript - ASP dotnet core webApp:请求后立即调用 SignalR websocket onclose()
- awk - awk 如何处理输入文件?
- typescript - TypeScript 中每个键的泛型映射对象类型
- javascript - 新对象被javascript循环中的旧对象覆盖
- javascript - 网站在 iframe 上没有响应
- django - AWS Beanstalk 中的 Django 应用程序部署 - 部署后出错
- azure-devops - 如何使用 azure devops rest api 在过去 180 天内获取成功和失败版本的计数
- python - 套接字通信中的问题
- c# - 当我将代码复制并粘贴为 Autodesk Forge 教程时,OAuthController 出现错误