Если я вместо этого

page.evaluate(function() {
    document.getElementById('idButtonSpan').click();  
});

Текущую дату можно получить с помощью: new Date (Date.now ()). ToUTCString () {* } Спасибо check_ca. Отличная работа.

и затем напечатаю его,

 return document.getElementById('idButtonSpan');

тогда он печатает [объектный объект], поэтому элемент существует.

Элемент действует как кнопка, но на самом деле это просто элемент span, а не вход ввода.

Мне удалось заставить эту кнопку нажимать для работы с Каспером, но у Каспера были другие ограничения, поэтому я вернулся к PhantomJS.

у нас есть что-то вроде этого:

.click() Код WebWorkers:

function click(el){
    var ev = document.createEvent("MouseEvent");
    ev.initMouseEvent(
        "click",
        true /* bubble */, true /* cancelable */,
        window, null,
        0, 0, 0, 0, /* coordinates */
        false, false, false, false, /* modifier keys */
        0 /*left*/, null
    );
    el.dispatchEvent(ev);
}

jquery.ajax HTMLElement.prototype.click, он не будет беспокоиться о том, как он вызывается (глобальная область видимости / даже из другой функции), поэтому глобальная область видимости Значение, которое я являюсь глобальным, не будет напечатано. qunit-config.js Это не красиво, но я использовал это, чтобы позволить мне использовать jQuery для выбора:

if (window._phantom) {
  // Patch since PhantomJS does not implement click() on HTMLElement. In some 
  // cases we need to execute the native click on an element. However, jQuery's 
  // $.fn.click() does not dispatch to the native function on <a> elements, so we
  // can't use it in our implementations: $el[0].click() to correctly dispatch.
  if (!HTMLElement.prototype.click) {
    HTMLElement.prototype.click = function() {
      var ev = document.createEvent('MouseEvent');
      ev.initMouseEvent(
          'click',
          /*bubble*/true, /*cancelable*/true,
          window, null,
          0, 0, 0, 0, /*coordinates*/
          false, false, false, false, /*modifier keys*/
          0/*button=left*/, null
      );
      this.dispatchEvent(ev);
    };
  }
}

, но вы всегда можете заменить

var rect = page.evaluate(function() {
    return $('a.whatever')[0].getBoundingClientRect();
});
page.sendEvent('click', rect.left   rect.width / 2, rect.top   rect.height / 2);

. Это сработало для меня. Надеюсь, что это будет полезно и для других. $(s)[0]. Это как окно, которое вы можете открыть с помощью document.querySelector(s) JavaScript — Как я могу вызвать событие onchange вручную?

(она полагается на элемент находится в виду, т. е. ваш viewportSize.height достаточно большой).

Надеюсь, что следующий метод будет полезен. Это работало для меня в версии 1.9

page.evaluate(function(){
    var a = document.getElementById("spr-sign-in-btn-standard");
    var e = document.createEvent('MouseEvents');
    e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    a.dispatchEvent(e);
    waitforload = true;
});

Используйте простой JavaScript с

2 — это число цифр, до которого мы хотим округлить это число. 1.9.2, это сработало для меня, сработали обработчики кликов:

var a = page.evaluate(function() {
    return document.querySelector('a.open');
});

page.sendEvent('click', a.offsetLeft, a.offsetTop);

. Мне никогда не удавалось напрямую щелкнуть элемент. Вместо этого я просмотрел HTML, чтобы найти, какая функция была вызвана с помощью onclick, а затем вызвал эту функцию. evaluate, что-то вроде этого:

page.evaluate(function() {
    document.getElementById('yourId').click();
});

Document.querySelector (element) .click () работает при использовании Phantomjs 2.0

Рекомендуется

click: function (selector, options, callback) {
    var self = this;
    var deferred = Q.defer();
    options = options || {timeout:1000}; 
    setTimeout(function () { 
        self.page.evaluate(function(targetSelector) {
            $(document).ready(function() {
                document.querySelector(targetSelector).click();
            }) ;
        }, function () {
                deferred.resolve();
        }, selector);
    }, options.timeout);
    return deferred.promise.nodeify(callback);
},

falsey

Это адаптировано из

из ответ stovroz , включая события представление так, чтобы над кнопкой не требовалась всплывающая подсказка, и, в конце концов, мне не нужно было обнаруживать сенсорное устройство из Javascript методами, которые dblclick (по два из каждого ). mousedown, mouseup и click Следующие два способа вызывают только событие

var rect = page.evaluate(function(selector){
    return document.querySelector(selector).getBoundingClientRect();
}, selector);
page.sendEvent('doubleclick', rect.left   rect.width / 2, rect.top   rect.height / 2);

Обратите внимание на перенос в

, но не другие события, которые должны предшествовать ему.dblclick, Но не другие события, которые должны предшествовать ему.

Адаптировано из . Он включает интерфейс на основе Java, который определяет URL-адреса и упрощает доступ к ним. из это строка поиска. Ключевое слово :

page.evaluate(function(selector){
    var el = document.querySelector(sel);
    var ev = document.createEvent("MouseEvent");
    ev.initMouseEvent(
        'dblclick',
        true /* bubble */, true /* cancelable */,
        window, null,
        0, 0, 0, 0, /* coordinates */
        false, false, false, false, /* modifier keys */
        0 /*left*/, null
    );
    el.dispatchEvent(ev);
}, selector);

Адаптировано из . Он включает интерфейс на основе Java, который определяет URL-адреса и упрощает доступ к ним. из Джобинса Джона :

page.evaluate(function(selector){
    var el = document.querySelector(sel);
    var e = document.createEvent('MouseEvents');
    e.initMouseEvent('dblclick', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    el.dispatchEvent(e);
}, selector);

Полный тестовый скрипт

Самый простой способ — использовать jQuery.

page.evaluate(function() {
  page.includeJs("your_jquery_file.js", function() {
    page.evaluate(function() {
      $('button[data-control-name="see_more"]').click();
    });
  });
});

update jquery- simulate . Я использую это в PhantomJS и Chrome

$ele..simulate( "click" );