PhantomJs点击链接或运行
我只是习惯了PhantomJs,到目前为止它确实很酷。
我试图抓取网站并获取有关网站上产品的数据。 每个产品页面都以可见的产品默认颜色加载。 当你点击一个色板时,它通过运行一个功能来交换新的颜色。 每个可点击的颜色样本元素如下所示:
<input type="image" id="swatch_0" onclick="pPage.getColor(0);" src="http://www.site.com/img50067.jpg">
getColor更新该颜色的缩略图和价格。 每个可用颜色(swatch_0,swatch_1等)的id增量以及传递给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);
我得到相同的输出。 任何帮助表示赞赏。
如果您在此处直接在HTML中指定onclick
处理程序,则可以直接使用Javascript调用它:
$(function() {
$('#swatch_0')[0].onclick();
});
我相信你也可以使用PhantomJS page
方法sendEvent()
来发出本地点击事件。 但是看起来这有点复杂,因为您必须从PhantomJS上下文中调用鼠标的x,y位置。 未经测试的代码:
var elementOffset = page.evaluate(function() {
return $('#swatch_1').offset();
});
page.sendEvent('click', elementOffset.left + 1, elementOffset.top + 1);
在这里几个月没有太多活动,但我最近一直在处理这些东西,也许这是你的问题的答案
如果jquery已经作为你正在运行的页面的一部分加载,那么注入jquery将不起作用,你会得到你描述的行为(我也遇到过这种情况)。
所以当你注入jQuery代码时,你应该首先确定它不是上下文的一部分
链接地址: http://www.djcxy.com/p/58207.html