ktty1220 / cheerio-httpcli

iconvによる文字コード変換とcheerioによるHTMLパースを組み込んだNode.js用HTTPクライアントモジュール
MIT License
262 stars 28 forks source link

生のDOMを操作してclickした場合に例外が発生する #7

Closed kakusuke closed 8 years ago

kakusuke commented 8 years ago

ちょっと解決法がすぐ出てこないのでissueで投げさせてもらいますね。

テーブルのセルの直下のセル内のリンクをクリックするのに、生DOMを介した場合にエラーが発生しました。 原因は、cheerioで包んだ要素に_documentInfoが存在しないためのようです。

以下、再現コードです。

it('生のa要素をclickしてもリンク先を取得できる', function (done) {
  cli.fetch(helper.url('form', 'utf-8'), function (err, $, res, body) {
    $($('.rel')[0]).click(function (err, $, res, body) {
      assert.deepequal($.documentinfo(), {
        url: helper.url('auto', 'euc-jp'),
        encoding: 'euc-jp'
      });
      assert(type(res) === 'object');
      assert(type($) === 'function');
      assert(type(body) === 'string');
      done();
    });
  });
});
ktty1220 commented 8 years ago

6 に引き続きありがとうございます。

cheerioのソースとにらめっこしながら抜け道を探したところ、なんとか_documentInfoを受け渡すことはできそうですが、かなり力技であるのと、他のパターンでもちゃんと対応できているのかどうかcheerio側の動きをちゃんと調査する必要があるので正式対応はちょっと先、もしくは「生DOMは未対応です」で押し通す可能性もあります。:sweat_smile: (experimentブランチで実験中)

オーソドックスに$('.rel').eq(0)で書けばちゃんと動くので、とりあえず火急案件でもないかな、と思いますので。

ktty1220 commented 8 years ago

スマートな解決方法を見つけたので近日中に0.3.6としてアップできそうな気がします。

ktty1220 commented 8 years ago

0.3.6リリースしました。