我刚开始接触PhantomJs,目前为止它真的很酷。
我正在尝试爬取一个网站,并获取有关该网站上产品的数据。每个产品页面都会加载默认颜色的产品。当您单击颜色样本时,它会通过运行函数来交换新颜色。每个可点击的颜色样本元素看起来像这样:
<input type="image" id="swatch_0" onclick="pPage.getColor(0);" src="http://www.site.com/img50067.jpg">
getColor更新该颜色的缩略图和价格。id递增用于每个可用的颜色(swatch_0,swatch_1等),传递给getColor的参数也递增。我想通过PhantomJs遍历每种颜色并提取相应的数据。
我已经加载了页面、加载了jQuery,并可以获取初始加载的颜色的数据,但似乎没有任何方法允许我执行点击事件。
以下是我的尝试:
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);
}
这让我感到:
console> Price is: $19.95
console> Selection is: blue
console> [Object Object]
console> TypeError: 'undefined' is not and object // repeating until I manually exit
没有其他代码运行。我也尝试过像这样不使用jQuery触发事件:
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);
直接运行该函数:
pPage.getColor(1);
我也得到了相同的输出。非常感谢您的帮助。
onclick
不是 jQuery 事件 - 它是 DOM 元素上的本地方法(这就是为什么我的示例使用$(...)[0].onclick
-[0]
获取实际的 DOM 元素,而不是 jQuery 对象)。这在许多情况下都不起作用,但当onclick
包含在 HTML 标记中时,它确实起作用。 - nrabinowitz