私は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
いない他のコードの実行を。
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);
直接機能を実行している:私はまた、このようにjQueryのないイベント発射しようとした
pPage.getColor(1);
をと私は同じ出力を得ます。どんな助けもありがとうございます。
の一部ではないことを確認する必要がありますのonClickは、jQueryのイベントであることを確認していますか?私はそれについてのドキュメントを見つけることができません。私の理解は、.click()はイベントを要素にバインドしますが、それでもクリックする必要があります。 私はsendEventを試していません。それは有望そうだ。この特定のプロジェクトでは、私は別のルートに行くことにしました。私はiMacrosを使ってページデータをスクラップしています。実際のブラウザを使用しているため、AjaxとJavascriptは問題ではありません。 ありがとう! –
'onclick'はjQueryイベントではありません。DOM要素のネイティブメソッドです(私の例では' $(...)[0]を使用しています)。onclick' - '[0]'はjQueryオブジェクトではなく実際のDOM要素を取得します)。これは多くの状況では機能しませんが、 'onclick'がHTMLマークアップに含まれていると動作します。 – nrabinowitz
BTW - この種のブラウザベースのスクレイピングのためにSeleniumを検討することもできます。それは非常に良いですし、実際のブラウザを使用して、他の言語の束のバインディングを持っています。 – nrabinowitz