Phantom JS Clicking Buttons - дождитесь полной загрузки страницы

Я пытаюсь войти на сайт с помощью Phantom JS, чтобы быть в курсе цен своих поставщиков.

Логин и пароль вводятся, но кнопка входа не нажимается.

Если кнопка входа является «вводом» вместо «кнопки», .click() должен работать, однако я не могу найти способ нажать «кнопку».

Форма входа не имеет идентификатора, ИМЯ или ДЕЙСТВИЯ для отправки.

Если кто знает решение буду очень признателен

Благодарность

Фантом JS

//username entered automatically on load
document.getElementById("password").value="1234";
document.getElementById('btn-login').click();

Форма входа

<form onsubmit="return false;" method="post">
          <fieldset class="customer-login">
            <div class="form-group">
              <label for="name">Email Address</label>
              <input type="username" class="form-control" id="username" placeholder="Enter your email address">
            </div>
            <div class="form-group">
              <label for="name">Password</label>
              <input type="password" class="form-control" id="password" placeholder="Enter your password">
            </div>
            <button type="submit" id="btn-login" class="btn btn-primary btn-block">
              Log In
            </button>
            <hr>
            <button type="button" id="btn-signup" class="btn btn-default btn-block">
              Sign Up
            </button>
            <button type="button" id="btn-reset" class="btn btn-default btn-block">
              Forgotten your password?
            </button>
          </fieldset>
        </form>

результат после запуска скрипта

ОБНОВИТЬ

document.getElementsByClassName('btn btn-primary btn-block')[0].click();

однако работает, так как ничего не возвращается и перенаправляет, он останавливает программу, прежде чем она вернется на домашнюю страницу, вошедшую в систему. У кого-нибудь есть решение, чтобы заставить программу ждать (когда она не знает о своем перенаправлении)?

я пробовал do { phantom.page.sendEvent('mousemove'); } while (page.loading);


person Alan P    schedule 10.08.2020    source источник
comment
Входные данные с типом submit обычно вызывают submit, а не click. Таким образом, вы можете просто submit() форму. Как document.forms[0].submit(). Тем не менее, вы должны удалить свой return false на form, что предотвращает его отправку.   -  person Lain    schedule 10.08.2020
comment
Спасибо Лейн. Я только что попробовал «document.forms[0].submit()», и он вернул «Не найдено». на странице. Поскольку я очищаю чужой сайт, я не могу изменить возврат, если это невозможно сделать из фантомного js?   -  person Alan P    schedule 10.08.2020
comment
Боюсь, что я не могу больше помочь вам с предоставленным входом.   -  person Lain    schedule 10.08.2020


Ответы (1)


При отправке формы ничего не возвращалось, поэтому программа остановилась. Программа не дождалась загрузки страницы, так как для начала перенаправления потребовалось несколько секунд.

сказав ему переместить мышь, пока URL-адрес не изменится на домашнюю страницу, дало браузеру столько времени, сколько ему нужно для изменения. затем сказав ему дождаться завершения загрузки страницы, он позволил странице полностью загрузиться до того, как контент был захвачен.

page.evaluate(function () {
document.getElementsByClassName('btn btn-primary btn-block')[0].click();
});
do { phantom.page.sendEvent('mousemove'); } while (page.evaluate(function()
{
return document.location != "https://www.bestwaywholesale.co.uk/";
}));
do { phantom.page.sendEvent('mousemove'); } while (page.loading);

person Alan P    schedule 12.08.2020