Puppeteer 等待 Cloudfare 重定向完成

标签 puppeteer

我想登录一个使用 Cloudfare DDOS 保护的网站,如下所示:

enter image description here

代码很简单:

const puppeteer = require('puppeteer');
const C = require('./constants');
const USERNAME_SELECTOR = 'input[name="username"]';
const PASSWORD_SELECTOR = 'input[name="password"]';
const CTA_SELECTOR = '.button';
var cloudscraper = require('cloudscraper');

async function startBrowser() {
  const browser = await puppeteer.launch({
  headless: true,
  slowMo: 10000,
  });
  const page = await browser.newPage();
  return {browser, page};
}

async function closeBrowser(browser) {
  return browser.close();
}

async function playTest(url) {

  const {browser, page} = await startBrowser();
  page.setViewport({width: 1366, height: 768});
  await page.goto(url, {waituntil: 'domcontentloaded'});

  await page.screenshot({path: 'debug.png'});

  await page.click(USERNAME_SELECTOR);
  await page.keyboard.type(C.username);
  await page.click(PASSWORD_SELECTOR);
  await page.keyboard.type(C.password);
  await page.click(CTA_SELECTOR);
  await page.waitForNavigation();
  await page.screenshot({path: 'ipt.png'});
}

(async () => {
  await playTest("https://xy.com/login.php");
  process.exit(1);
})();

当我检查 debug.png 时,我仅看到 Cloudfare DDOS 保护页面。我不太明白为什么,我添加了 SlowMo 10sec 来等待执行。

最佳答案

您可以添加一个简单的 waitForSelector 来等待用户名选择器出现,

await page.waitForSelector(USERNAME_SELECTOR);
await page.click(USERNAME_SELECTOR);

关于Puppeteer 等待 Cloudfare 重定向完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58313305/

相关文章:

azure - 无法从 B2C/Azure AD (Active Directory) 获取 token - 本地存储和 session 存储为空 [Cypress/Puppeteer]

javascript - Puppeteer:如何在已经事件的浏览器窗口中打开选项卡?

reactjs - E2E测试 Material -UI Select with Puppeteer

javascript - Node.js puppeteer - 在循环中使用数组中的值来循环浏览页面

node.js - 传递的函数不能很好地序列化

docker - '--disable-dev-shm-usage' 不能解决 Docker 中的 Chrome 崩溃问题

javascript - 如何在puppeteer page.evaluate中使用url模块

javascript - 如何保存页面对象以供以后使用?

javascript - 无法将 Brave 浏览器与 Puppeteer 一起使用

javascript - Puppeteer Crawler - 错误:net::ERR_TUNNEL_CONNECTION_FAILED