Ben sadece PhantomJs alışmak ve şimdiye kadar gerçekten çok serin.PhantomJs linklere tıklamak veya sayfa üstü fonksiyonlar çalıştırmak
Bir siteyi taramaya ve sitede bulunan ürünlerle ilgili verileri almaya çalışıyorum. Her ürün sayfası görünür ürünün varsayılan rengiyle birlikte yüklenir. Renk örneğini tıkladığınızda, bir işlevi çalıştırarak yeni rengi değiştirir. Her tıklanabilir Renk skalası öğesi şöyle görünür:
<input type="image" id="swatch_0" onclick="pPage.getColor(0);" src="http://www.site.com/img50067.jpg">
getColor o renk için küçük resmini ve fiyatını günceller. Kullanılabilir her renk için id artışları (swatch_0, swatch_1, vb.) Ve argüman da getColor artışlarına geçirilir. Ben PhantomJs ile her bir renk boyunca yinelemek ve her biri için ilgili verileri çekmek istiyorum.
Sayfayı yükledim, jQuery yükledim ve verileri tam olarak yüklenen renk için çekebiliyorum, ancak hiçbir şey tıklama olayları yürütmeme izin vermiyor.
page.evalaute(function){
var selection = $('#confirmText').text(); // name of the color
var price = $('#priceText').text(); // price for that color
console.log('Price is: ' + price);
console.log('Selection is: ' + selection);
console.log($('#swatch_1'));
$('#swatch_1').trigger("click");
selection = $('#selectionConfirmText').text();
price = $('#priceText').text();
console.log('Price is: ' + price);
console.log('Selection is: ' + selection);
}
Bu bana verir:
console> Price is: $19.95
console> Selection is: blue
console> [Object Object]
console> TypeError: 'undefined' is not and object // repeating until I manually exit
başka hiçbir kod çalıştırır burada
deniyorum budur.
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
var cb = document.getElementById("swatch_1");
cb.dispatchEvent(evt);
Ve işlevi doğrudan çalışan: Ben de böyle jQuery olmadan olay ateş denedim
pPage.getColor(1);
Ve aynı çıktı elde edin. Herhangi bir yardım takdir edilir. onclick
işleyicisi buradan sahip olarak HTML doğrudan belirtildiğinde
Eğer onClick bir jQuery olaydır eminiz bir parçası değil yapmalıdır? Bu konuyla ilgili belgeleri bulamıyorum. Anladığım kadarıyla .click() olayı öğeye bağlayacaktır, ancak yine de tıklamanız gerekir. SendEvent'i denemedim. Bu umut verici görünüyor. Bu özel proje için farklı bir rotaya gitmeye karar verdim. Sayfa verilerini kazımak için iMacros kullanıyorum. Gerçek bir tarayıcı kullanır, bu yüzden Ajax ve Javascript bir sorun değildir. Teşekkürler! –
'onclick' jQuery olayı değildir - DOM öğesinde yerel bir yöntemdir (bu benim örneğimin anlamı $ (...) [0].onclick' - '[0]', bir jQuery nesnesi değil, gerçek DOM öğesini alır. Bu pek çok durumda işe yaramaz, ancak HTML biçimlendirmesinde "onclick" bulunduğunda çalışır. – nrabinowitz
BTW - Bu tür tarayıcı tabanlı kazıma işlemleri için Selenium'u da düşünebilirsiniz. Oldukça iyi, gerçek bir tarayıcı kullanıyor ve bir sürü başka dil için bağlayıcılar var. – nrabinowitz