私は 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);
そして、同じ出力が得られます。どんな助けでも大歓迎です。