Кукольник неверный селектор - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь заполнить форму с помощью Puppeteer на веб-странице, у ввода есть идентификатор, и я использую его как селектор.

Идентификатор:

#loginPage:SiteTemplate:formulaire:login-field

Когда я получаю селектор из Chrome, он дает мне следующее:

#loginPage\3a SiteTemplate\3a formulaire\3a login-field

И, если я добавлю первый или второй вариант в Puppeteer, он выдаст мне эту ошибку:

Error: Evaluation failed: DOMException: Failed to execute 'querySelector' on 'Document': '#loginPage:SiteTemplate:formulaire:login-field' is not a valid selector.

Вот код, если необходимо:

(async () => {
    const browser = await puppeteer.launch({headless: false});
    const page = await browser.newPage();
    await page.goto('XXX');
    await page.click(GOTO_LOGIN_BUTTON_SELECTOR)
    await page.waitForNavigation({waitUntil: 'load'});
    await page.waitFor(EMAIL_SELECTOR); // here
    await page.focus(EMAIL_SELECTOR);
    await page.keyboard.type(CREDS.email);
    await page.focus(PASSWORD_SELECTOR);
    await page.keyboard.type(CREDS.password);

    await browser.close();
})();

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Я не уверен, но я бы бросил черту await page.waitForNavigation({waitUntil: 'load'});

И заменить await page.waitFor(EMAIL_SELECTOR); // here

с await page.waitForSelector(EMAIL_SELECTOR);

И проверьте, используете ли вы просто # login-field или другое #loginPage > SiteTemplate > formulaire > login-field

Я могу ошибаться, так как я все еще работаю над этим.

0 голосов
/ 14 ноября 2018

Один из вариантов такого идентификатора заключается в следующем:

const EMAIL_SELECTOR = '[id="loginPage:SiteTemplate:formulaire:login-field"]';

Или, если это не сработает, разделите его следующим образом, чтобы обойти использование ::

const EMAIL_SELECTOR = '[id*="loginPage"][id*="SiteTemplate"][id*="formulaire"][id*="login-field"]';

Надеюсь, один (или оба) из них помогут!

...