2016-11-20 17 views
0

.type()はうまく動作しますが、ナイトメアを検索ボタンをクリックすることはできません。 何が問題なのですか?NightmareJS .click()メソッド - セレクタの問題

.type('form[action="/search/web/direct_search.php"] [class=_1frb]', string) 
.click('form[action="/search/web/direct_search.php"] [type=submit]') 
//.click('#js_x > form > button') 
//.click('button[class="_42ft _4jy0 _4w98 _4jy3 _517h _51sy"]') 

開発者ツールコンソールはボタンを見つける:

document.querySelector('form[action="/search/web/direct_search.php"] [type=submit]') 
<button value=​"1" class=​"_42ft _4jy0 _4w98 _4jy3 _517h _51sy" aria-label=​"Search" tabindex=​"-1" data-testid=​"facebar_search_button" type=​"submit">​…​</button>​ 

その後編集:そこ

あなたが行く、私の友人、私はインポートを削除し、単一のファイルにすべてを入れている、I既にクッキーでログインしていますので、これは問題を再現する完全なコードです:

var Nightmare = require('nightmare'); 
var nightmare = Nightmare({ 
    show: true 
}); 
var string = "TEST"; 
var search = function(string) { 
    return function(nightmare) { 
     nightmare 
      .goto('http://www.facebook.com') 
      .wait('form[action="/search/web/direct_search.php"] [class=_1frb]') 
      .type('form[action="/search/web/direct_search.php"] [class=_1frb]', string) 
      .click('form[action="/search/web/direct_search.php"] [type=submit]') 
      // .click('#js_x > form > button') 
      // .click('button[class="_42ft _4jy0 _4w98 _4jy3 _517h _51sy"]') 
      .wait(2000) 
      .screenshot('after.png') 
      .then(function() { 
       return nightmare 
        .wait(); 
      }) 
    }; 
}; 
nightmare 
    .useragent('...') 
    .use(search(string)) 
+0

ようこそスタックオーバーフロー!デバッガの使い方を学ぶ必要があるようです。 [補完的なデバッグ手法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)にご協力ください。その後も問題が残っている場合は、もう少し詳しくお聞かせください。 –

+0

@JoeC私はそれに応じて自分の投稿を更新しました。 – Dobi

+0

私はその編集によって、あなたがデバッグする方法について私の投稿を読まなかったと仮定します。 –

答えて

1

ナイトマreの.type()はキーボードイベントを発します。あなたはユニコード値で.type('selector', '\u000d')のようなリターンキーを "押す"ことができます。以下に示す例はうまくいくはずです。

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

nightmare 
    .goto("http://www.facebook.com") 
    .wait('form[action="/search/web/direct_search.php"] [class=_1frb]') 
    .type('form[action="/search/web/direct_search.php"] [class=_1frb]', "test\u000d") 
    .catch(function(error) { 
     console.log(error) 
    }) 

通常、Facebookで検索するときは、クエリを入力するときに[候補]メニューが開きます。検索ボタンを押すとすぐに検索が行われます。しかし、ナイトメアの実行を見ると、提案の提案メニューが表示され、入力時に閉じる(これは電子ブラウザの不具合です)。だから私はあなたが検索ボタンを2回押しなければならないと信じています。一度メニューを開き、次に実際に検索する。

いずれにしても、リターンキーイベントを送信する方が簡単ですばらしいです。