2013-02-22 13 views
5

Dom'ı değiştirmeyen bazı JS API'leri bulunan ancak bazı numaralar döndüren bir web sayfam var. Bu sayfaları yükleyen ve bu işlevleri indirilen sayfa bağlamında yürüten bir NodeJS uygulaması yazmak istiyorum.Çelatlanmış JavaScript'i cheerio ile yürütme

Sayfa kazıma için cheerio'ya bakıyordum .. ancak DOM'u gezinmek ve Java ile işlemek için ne kadar kolay olduğunu görmeme rağmen sayfa işlevlerini çalıştırma konusunda herhangi bir erişim göremiyorum. Bunu yapmak mümkün mü?

Bunun yerine jsdom'a bakmalı mıyım?

Teşekkür

+0

[this] (http://stackoverflow.com/a/7978072/2172543) sorunuzu şu ana kadar bulduğum en iyi SO yanıtıdır. Bu kesinlikle javascript web sayfalarını yürütmekle ilgili değildir, HTML ayrıştırma hakkındadır. – Marcel

cevap

1

Cheerio ve jsdom hem HTML kazıyıcılardır ve JavaScript yürütülür hiçbir fikri yoktur. Erişmek istediğiniz API JavaScript’e yazılırsa, bunları çıkarmanızı ve düğüm içinde çalıştırmanızı engelleyecek çok az şey vardır. Ancak, keyfi JavaScript’in indirilmesi/çalıştırılması büyük bir güvenlik riski oluşturabilir. Bir tarayıcının davranışını simüle etmek istiyorsanız, http://phantomjs.org/'a bakın. Bu, Düğüm için başsız bir tarayıcıdır ve her şeyi sıradan bir tarayıcıyı da yapabilir.

+1

JS'yi Node'da güvenli bir şekilde çalıştırmak istiyorsanız, kodunuzun geri kalanından tamamen izole edilmiş bir “runInContext” yöntemine sahip olan vm modülü aracılığıyla mükemmel bir şekilde yapılabilir (ancak yine de kaynakları koruyabilir). –

+2

jsdom **, yalnızca JavaScript yürütme fikri olmayan bir HTML kazıyıcı değildir. Dokümanlara bakın: [Başlatma yaşam döngüsü] (https://github.com/tmpvar/jsdom/blob/master/README.md#initialization-lifecycle) ve [Hard için: jsdom.jsdom] (https: // github. com/tmpvar/jsdom/damla/ana/README.md # for-hardcore-jsdomjsdom) – rsp

2

Tam olarak işlenen çıktıyı sağlayacak olan PhantomJS'yi kullanmak istediğiniz gibi geliyor ve daha sonra da bu özelliği kullanabilirsiniz.