2016-03-23 3 views
2

Ich habe für ein paar Tage für dieses eine Problem gekämpft. Ich benutze Nightmarejs, um auf ein Bild auf einer Ebay-Produktseite zu klicken. Wenn Sie darauf klicken, wird die Vollversion des Bildes in einem Leuchtkasten angezeigt.Klicken Sie auf ein Bild mit nightmarejs

Nightmarejs wird einfach nicht auf dieses Bild klicken! Ich kann auf andere Links klicken, aber das Bild wird nie angeklickt, so dass kein Leuchtkasten erscheint. Dies ist das Bild, das ich zu klicken bin versucht:

enter image description here

URL: http://www.ebay.com/itm/Newton-Distance-S-III-Lime-Red-Running-Shoes-Mens-M-New-155/311559183260?hash=item488a5fdb9c&_trkparms=5374%3AFeatured%7C5373%3A0

Hier ist mein Code:

var Nightmare = require('nightmare'); 

    var selector1 = '#PicturePanel div.pp-ic.pp-ic500 table tbody tr a#linkMainImg'; 
    var selector2 = '#PicturePanel div.pp-ic.pp-ic500 table tbody tr a#linkMainImg #mainImgHldr'; 
    var selector3 = '#PicturePanel div.pp-ic.pp-ic500 table tbody tr a#linkMainImg #mainImgHldr img#icImg'; 
    var selector4 = '#PicturePanel div.pp-ic.pp-ic500 table tbody tr a#linkMainImg #mainImgHldr #vi_zoom_trigger_mask'; 
    var selector5 = '#PicturePanel div.pp-ic.pp-ic500 table tbody tr a#linkMainImg #mainImgHldr td.img.img500'; 
    var selector5 = '#PicturePanel div.pp-ic.pp-ic500 table tbody tr a#linkMainImg #mainImgHldr table.img.img500'; 
    var selector6 = '#PicturePanel'; 
    var selector7 = '#PicturePanel div.pp-ic.pp-ic500'; 
    var selector8 = '#PicturePanel div.pp-ic.pp-ic500 table'; 
    var selector9 = '#PicturePanel div.pp-ic.pp-ic500 table tbody'; 
    var selector10 = '#PicturePanel div.pp-ic.pp-ic500 table tbody tr'; 
    var gallery = '#vi_main_img_fs'; 

    var run = function() { 
     try { 
      var nightmare = new Nightmare({show: true}); 
      nightmare.goto('http://www.ebay.com/itm/Newton-Distance-S-III-Lime-Red-Running-Shoes-Mens-M-New-155/311559183260?hash=item488a5fdb9c&_trkparms=5374%3AFeatured%7C5373%3A0') 
      .wait(2000).click(selector1) 
      .wait(1000).click(selector2) 
      .wait(1000).click(selector3) 
      .wait(1000).click(selector4) 
      .wait(1000).click(selector5) 
      .wait(1000).click(selector6) 
      .wait(1000).click(selector7) 
      .wait(1000).click(selector8) 
      .wait(1000).click(selector9) 
      .wait(1000).click(selector10) 
      .wait(1000) 
      .evaluate(function() { 
       return document.documentElement.innerHTML; 
      }).end() 
      .then(function(html) { 
       console.log('html: ', html); 
      }); 
     } catch(e) { 
      console.log('error: ', e); 
     } 
    }; 
    run(); 

Ich habe versucht, alle möglichen Wähler fast haben. Ich bekomme auch keine Ausnahme vom Albtraum (wenn es den Selektor nicht findet, wirft er einen).

Ich bin wirklich auf diesem einen ratlos.

+0

'# vi_zoom_trigger_mask' ist nicht sichtbar, wenn Sie den Mauszeiger über sie ... vielleicht können Sie versuchen. – mihai

+0

@mihai Es gibt keine Möglichkeit, in Alptraum zu schweben. – bmills

+0

ist es möglich [dies] (http://stackoverflow.com/questions/16915485/how-to-use-phantomjs-to-simulate-mouse-hover-on-a-html-element) zu tun? Wenn nicht, könnte dies eine Einschränkung der Bibliothek sein. – mihai

Antwort

0

Es gibt tatsächlich zwei Elemente für jeden Hover, den Sie erstellen möchten. Stellen Sie außerdem sicher, dass sich das Element, das Sie in der Schwebe halten, in der Ansicht befindet, oder blättern Sie, um es sichtbar zu machen. Dies ist

wie schweben 1 Element sollte wie folgt aussehen:

var Nightmare = require('nightmare'); 
var nightmare = Nightmare({ 
    show: true, 
    openDevTools: true 
}) 

var selector1 = '#vi_zoom_trigger_mrk > div > table > tbody > tr > td > b'; 
var selector2 = '#mainImgHldr'; 
var url = 'http://www.ebay.com/itm/Newton-Distance-S-III-Lime-Red-Running-Shoes-Mens-M-New-155/311559183260?hash=item488a5fdb9c&_trkparms=5374%3AFeatured%7C5373%3A0'; 

nightmare.goto(url) 
    .wait(3000) 
    .scrollTo(600, 0) //Scroll to the element as hover might not work 
    .evaluate(function(pre, post) { 
    var elem = document.querySelector(pre); 
    var elemPost = document.querySelector(post); 
    console.log(elem); 
    var event = document.createEvent('MouseEvent'); 
    event.initEvent('mouseover', true, true); 
    elem.dispatchEvent(event); 
    //Waiting for element to appear 
    setTimeout(() => {elemPost.dispatchEvent(event)}, 500); 
    console.log("Mouse over will be done"); 
    }, selector2, selector1) 
    .then(function() { 
    console.log("All Done."); 
    //You can call further selectors here 
    }) 
    .catch(function(err) { 
    console.log(err); 
    })