Javascript 使用木偶演员输入

Javascript 使用木偶演员输入,javascript,xpath,puppeteer,Javascript,Xpath,Puppeteer,所以我一直在尝试与木偶演员合作,老实说,这很麻烦,但我决心更好地了解它 因此,我尝试使用Page.Type()函数,但在查找输入或。。。我认为可能是我的网速太慢,找不到选择器造成了这个问题 但我原以为 wait instagram.page.waitForNavigation({waitUntil:'networkidle2'}) 本来可以解决这个问题的,也许我做错了什么,我不确定 以下是文件: main.js- const insta = require('./instagram'); (

所以我一直在尝试与木偶演员合作,老实说,这很麻烦,但我决心更好地了解它

因此,我尝试使用Page.Type()函数,但在查找输入或。。。我认为可能是我的网速太慢,找不到选择器造成了这个问题

但我原以为

wait instagram.page.waitForNavigation({waitUntil:'networkidle2'})

本来可以解决这个问题的,也许我做错了什么,我不确定

以下是文件:

main.js-

 const insta = require('./instagram');

(async () => {

    await insta.initialize();

    await insta.login('user', 'password');

    debugger;
})()
instagram.js-

    const puppeteer = require('puppeteer');

const BASE_URL = 'https://instagram.com/';

const instagram = {
    browser: null,
    page: null,

    initialize: async () => {

        instagram.browser = await puppeteer.launch({
            headless: false
        });

        instagram.page = await instagram.browser.newPage();

    },

    login: async (username, password) => {

        await instagram.page.goto(BASE_URL, { waitUntil: 'networkidle2' });

        let loginButton = await instagram.page.$x('//*[@id="loginForm"]/div/div[3]/button')

        await loginButton[0].click();

        await instagram.page.waitForNavigation({ waitUntil: 'networkidle2' });

        await instagram.page.waitFor(1000);

        await instagram.page.type('input[name="username"]', username, { delay: 500 });
        await instagram.page.type('input[name="password"]', password, { delay: 500 });

        debugger;
    }

}

module.exports = instagram;

您的
登录:
函数应如下所示:

    login: async (username, password) => {
        await instagram.page.goto(BASE_URL, { waitUntil: 'networkidle2' });
        await instagram.page.waitForNavigation({ waitUntil: 'networkidle2' });
        await instagram.page.waitFor(1000);
        await instagram.page.type('input[name="username"]', username, { delay: 500 });
        await instagram.page.type('input[name="password"]', password, { delay: 500 });

        const loginButton = await instagram.page.$x('//*[@id="loginForm"]/div/div[3]/button');

        await Promise.all([
          this.page.waitForNavigation(),
          loginButton[0].click();
        ]);

        debugger;
    }

在填写输入之前,您正在单击登录按钮。另外,我所展示的
Promise.all
块是点击导航到新URL的按钮的推荐方式。

您引用了一个神秘的“问题”。你说的这个“问题”是什么?请详细解释一下。透露它的秘密。所以你试着先点击“登录”按钮,然后填写用户名和登录字段?试着用
{headless:false}
启动木偶演员,这不会是一个麻烦;)好的,谢谢你的回答,但是我仍然有一个问题,输入字段中没有填写任何信息。那么问题仍然是一样的,那会是什么呢?@Blue您是否已经通过了
登录
功能代码并评估了用户名和密码变量?还是将它们记录到控制台?你已经试过什么了?不,我没有试过。我假设我能够看到它输入到字段中,如果我尝试其他选择器,我不知道为什么该选择器不起作用。