简单登录机器人最近停止工作-超时错误- waitForSelector



我因为工作需要每天登录这个网站。我以前找到有人给我建立一个机器人,以帮助自动化登录过程,然后把我的登录结果作为登录的证明。

昨天网站通过迁移到新的主机或类似的东西,现在我得到一个超时错误的脚本。在下面引用的代码中,我已经删除了实际的用户名和密码,以保护我的隐私,但如果这是绝对必要的,我很乐意在DM中分享它。任何帮助都非常感谢!!

下面是错误中引用的代码:

const page = await browser.newPage();
await page.setViewport({ width: 800, height: 600 });
await page.goto(
"https://prod.caseworthy.com/CaseWorthy/PortalDefault.aspx?DatabaseID=890&#/PortalDefault"
);
await page.waitForSelector("#UserNameField");
await page.type("#UserNameField", "USERNAME");
await page.type("#PasswordField", "PASSWORD");
await page.waitForTimeout(2000);
await page.click("#btnLogin");
await page.waitForTimeout(5000);

下面是错误文本:

TimeoutError: waiting for selector#UserNameFieldfailed: timeout 30000ms exceeded/Users/jordansimac/node_modules/puppeteer/lib/cjs/puppeteer/common/DOMWorld.js:526:34)在DOMWorld。waitForSelectorInPage(/用户/jordansimac/node_modules/操纵/lib/cj/操纵/共同/DOMWorld.js: 430:26)/Users/jordansimac/node_modules/puppeteer/lib/cjs/puppeteer/common/QueryHandler.js:31:77)在DOMWorld。waitForSelector(/用户/jordansimac/node_modules/操纵/lib/cj/操纵/共同/DOMWorld.js: 321:29)在框架。waitForSelector(/用户/jordansimac/node_modules/操纵/lib/cj/操纵/共同/FrameManager.js: 925:51)在页面。waitForSelector(/用户/jordansimac/node_modules/操纵/lib/cj/操纵/共同/Page.js: 2359:33)/Users/jordansimac/index.js:18:14@ processTicksAndRejections (node:internal/process/task_queues:96:5)

我没有什么编程经验,所以我没有尝试过任何不同的东西

您错过了一个步骤,在您写的url上,您需要单击sign in以便出现用户名和密码字段。

所以添加会解决你的问题。

await page.waitForSelector('a#signinlnk');
await page.click('a#signinlnk');

代码:

const puppeteer = require('puppeteer');
let browser;
(async () => {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
const delay = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));    

await page.setViewport({ width: 800, height: 600 });
await page.goto('https://prod.caseworthy.com/CaseWorthy/PortalDefault.aspx?DatabaseID=890#/PortalDefault');
// relevant part start
await page.waitForSelector('a#signinlnk');
await page.click('a#signinlnk');
// relevant part end
await page.waitForSelector('#UserNameField');
await page.type("#UserNameField", "USERNAME");
await page.type("#PasswordField", "PASSWORD");
await delay(2000);
await page.click("#btnLogin");
await delay(5000);
})().catch(err => console.error(err)). finally(() => browser ?. close());

另一个注意事项是page.waitForTimeout()被弃用,这就是为什么我添加延迟函数并使用它来代替

更新:

你也可以在我的代码中修改

await delay(2000);
await page.click("#btnLogin");
await delay(5000);

await page.waitForSelector("#btnLogin");
await page.click("#btnLogin");

并删除const delay = (milliseconds)...行,因为等待#btnLogin选择器(即登录按钮)而不是2和5秒延迟会更快。

相关内容

  • 没有找到相关文章

最新更新