2016-03-23 12 views
2

私はこの1つの問題について数日間苦労してきました。私はnightmarejsを使ってEbayの商品リストページの画像をクリックしています。クリックすると、イメージのフルサイズのバージョンがライトボックスに表示されます。nightmarejsで画像をクリック

Nightmarejsはこのイメージをクリックしないでください!私は他のリンクをクリックすることができますが、イメージは決してクリックされないので、ライトボックスはポップアップしません。これは私がクリックしようとしているイメージです。

enter image description here

URL:

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(); 

私が試したほとんどすべての可能なセレクタ: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

ここに私のコードです。悪夢からも例外はありません(セレクタが見つからない場合は、それをスローします)。

私は本当にこの1つに困っています。

+0

'#のvi_zoom_trigger_mask'は、おそらくあなたはそれを試すことができます...表示されません。 – mihai

+0

@mihaiナイトメアに乗る方法はありません。 – bmills

+0

[this](http://stackoverflow.com/questions/16915485/how-to-use-phantomjs-to-simulate-mouse-hover-on-a-html-element)を実行することは可能ですか?もしそうでなければ、ライブラリの限界かもしれません。 – mihai

答えて

0

実際には、ホバーごとに2つの要素があります。また、ホバリングしている要素が表示またはスクロール内にあることを確認して表示させます。

これは1つの要素を置く方法ですが、次のようになります。あなたはそれの上にカーソルを移動しない限り、

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); 
    }) 
関連する問題