Я запускаю безголовый экземпляр кукловода на виртуальной машине Debian9 Linux под HyperV. Я устанавливаю кукловод, используя npm, так как мой скрипт запускается под Node.js. Код запустится и попытается войти в систему. Вот фрагмент кода:
(async() => {
const browser = await puppeteer.launch({
headless: true,
args:['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
await page.goto(
'http://mysite', {
waitUntil: 'networkidle2'
});
await page.click(UNAMEFIELD);
await page.keyboard.type("USERNAME");
await page.click(PWDFIELDNAME);
await page.keyboard.type("SUPERSECRETPWD");
await page.click(PWDFIELDNAME);
await page.screenshot({ path: 'screenshots0.png' });
await page.click(LOGINBUTTON);
await page.waitForNavigation();
Я могу проверить, посмотрев на скриншоты, что имя пользователя правильно установлено, и я верю, что пароль правильный. Я могу вручную войти на сайт с хост-компьютера. Сценарий отскочил, и сайт жалуется на неправильное имя пользователя / пароль.
У меня есть похожие скрипты, которые используют casperjs / phantomjs. Они также терпят неудачу таким же образом. Я не думаю, что это на 100% хром / кукловод. Скорее всего, в ядре Linux или дистрибутиве ОС есть что-то, что препятствует принятию пароля. Мое подозрение, может быть, какая-то проблема сопоставления клавиш / набора символов? Эти скрипты работают на OpenSuse Leap42.3. Я думал, что буду более ответственным, перейдя в Debian. Между прочим, на всех машинах, на которых выполняются запущенные сценарии, выполнялась полная установка с графическим интерфейсом. Установка Debian только для консоли.
uname -a дает следующее:
4.19.0-6-amd64 # 1 SMP Debian 4.19.67-2 + deb10u1 (2019-09-20) x86_64 GNU / Linux
Я нахожусь в конце остроумия. Еще одним возможным осложнением является то, что сайт выполняет перенаправление с http на https, и полное доменное имя сайта изменяется. Может ли быть проблема безопасности?