node.js - 使用 Puppeteer 单击页面上的任意位置

标签 node.js puppeteer

目前,我正在使用 Puppeteer 从页面获取 cookie 和 header ,但它使用的是机器人预防系统,只有在单击页面时才会绕过该系统;我不想保持这个顺序,所以它是“可检测的”

如何让我的 Puppeteer 随机单击页面上的任意位置?无论它是否点击链接、按钮等..

我目前已获得此代码

const getCookies = async (state) => {
    try {
        state.browser = await launch_browser(state);
        state.context = await state.browser.createIncognitoBrowserContext();
        state.page = await state.context.newPage();
        await state.page.authenticate({
            username: proxies.username(),
            password: proxies.password(),
        });
        await state.page.setViewport(functions.get_viewport());
        state.page.on('response', response => handle_response(response, state));
        await state.page.goto('https://www.website.com', {
            waitUntil: 'networkidle0',
        });
        await state.page.waitFor('.unlockLink a', {
            timeout: 5000
        });
        await state.page.click('.unlockLink a');
        await state.page.waitFor('input[id="nondevice"]', {
            timeout: 5000
        });
        state.publicIpv4Address = await state.page.evaluate(() => {
            return sessionStorage.getItem("publicIpv4Address");
        });
        state.csrfToken = await state.page.evaluate(() => {
            return sessionStorage.getItem("csrf-token");
        });
        //I NEED TO CLICK HERE! CAN BE WHITESPACE, LINK, IMAGE
        state.browser_cookies = await state.page.cookies();
        state.browser.close();
        for (const cookie of state.browser_cookies) {
            if(cookie.name === "dtPC") {
                state.dtpc = cookie.value;
            }
            await state.jar.setCookie(
                `${cookie.name}=${cookie.value}`,
                'https://www.website.com'
            )
        }
        return state;
    } catch(error) {
        if(state.browser) {
            state.browser.close();
        }
        throw new Error(error);
    }
};

最佳答案

我能想到的从 DOM 中选择随机元素的最简单方法可能是使用 querySelectorAll()这将返回一个包含所有 <div> 的数组s 在您的文档中(或选择任何其他元素,例如 <p> 或其他任何元素),那么您可以轻松使用 click()从结果中随机选择一个,例如:

await page.evaluate(() => {
  const allDivs = document.querySelectorAll('.left-sidebar-toggle');
  const randomElement = allDivs[Math.floor(Math.random() * allDivs.length)];
  randomElement.click();
});

关于node.js - 使用 Puppeteer 单击页面上的任意位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63094895/

相关文章:

javascript - Node js 中 Json 长度始终未定义

javascript - Puppeteer - 使用 '--allow-file-access-from-files' 通过 XMLHttpRequest 加载本地文件不起作用

javascript - 如何将变量传递给评估函数?

puppeteer - session 和并发以及它们之间的关系

angularjs - 错误 : Cannot find module 'js-yaml' when running "bower install"

javascript - Html 表单不响应按 Enter 键

javascript - JavaScript堆如何处理递归

node.js - Node MongoDB : connection method callbacks never fire

javascript - firebase 功能中的 Puppeteer 无法启动 chrome

node.js - 在 puppeteer Node.js 中获取 href 属性