0

ASP.NETで実行されているサードパーティのWebサイトの3つの選択ボックスからデータを取り出すためだけにスクレーパーに取り組んでいますが、ここでの問題は、それらがカスケードされていることです(これがどのように呼ばれるかはわかりません)。したがって、2番目の選択入力に表示される内容は、最初の選択入力で選択されたものによって異なります。すべての可能性を取得して、それらを保存できるようにします。

私の問題:

変更(またはその他)イベントをトリガーして2番目の入力を更新する方法を理解するのに苦労しています。どうすればいいですか?

私はこれを行うためにcasperjsを使用していますが、それは問題ではありません。フロントエンドのjavascriptからプログラムで行う方法が必要です。

だから、それがクロームコンソールで動作する場合、それは私のために動作します。

フォームはこのページhttp://www.tuti.pt/contrat/net/default.aspxにあり、私が話している入力は「Distrito」と「Concelho」です。

長い間読んで申し訳ありませんが、私はこれ以上の詳細を隠すことができなかったと思います。

私が試したことは?

いつものことですが、.click()は機能すると思っていましたが、機能しなかったので、asp.netの特別なイベントである必要があります。

それから私は休憩を取りました、そして私が必要とするものを見つけるためにこの特定のスタックの平和は面白そうです。

Sys.Extended.UI.CascadingDropDownBehavior._clearItems (default.aspx:13)
Sys.Extended.UI.CascadingDropDownBehavior._setOptions (default.aspx:13)
Sys.Extended.UI.CascadingDropDownBehavior._onParentChange (default.aspx:13)
w.createDelegate (ScriptResource.axd:2)
w.addHandler.b.query.each.g (ScriptResource.axd:2)

誰かがこれについての知識を持っているなら、私はそれについていくらかの助けを持っていただければ幸いです。

私が探しているものである可能性のある方法があるように思われるのを見たばかりですraiseSelectionChanged(eventArgs)。どのオブジェクトでそれを呼び出すべきか、どの引数を渡す必要があるのか​​わかりません:s

この最後の情報はhttp://www.asp.net/ajaxlibrary/act_CascadingDropdown.ashxから取得しました

4

2 に答える 2

1

これを完全にChromeのコンソールから実行するためのコードを少し書きました。手順は次のとおりです。

  1. そのページはjQueryを使用していないように見えるため、コンソールでこれを実行してjQueryを含めます。

    var jq = document.createElement('script');
    jq.src = "http://code.jquery.com/jquery-latest.min.js";
    document.getElementsByTagName('head')[0].appendChild(jq);
    jQuery.noConflict();
    
  2. これで、選択ボックスのオプションを繰り返してDistrito、リクエストペイロードに次のようにPOSTajaxリクエストを作成するだけです。

{'knownCategoryValues':'Distrito:1;','category':'Concelho','contextKey':''}ここ1で、はのIDですDistrito。これは、select要素の対応するオプションの値に由来します。したがって、それらを反復処理する関数は次のようになります。

$.each( $('#ctl00_ContentPlaceHolderMain_SigaWeb_ContrataWizardNet_SigaWeb_BookMetaDadosVeiculos1_Meta_Auto_23 > option')
      , function(index,value) {   
        $.ajax({
                 url:'http://www.tuti.pt/wsSigaWebSearchContrata/wsSigaWebSearch.asmx/GetConcelhosPorDistrito'
                ,type:'POST'
                ,contentType: 'application/json; charset=UTF-8' 
                ,data: "{'knownCategoryValues':'Distrito:"+$(value).val()+";','category':'Concelho','contextKey':''}"
                ,success: function(data){
                            console.log(data);}
                          }); 
       });
于 2012-12-19T11:42:39.303 に答える
0

したがって、イベントをトリガーする方法はまだわかりませんが、実際にはそれが可能かどうかは疑問です...オブジェクトSys.Extended.UI.CascadingDropDownBehaviorにその選択入力の責任を負わせる方法があるかどうかはわかりませんが、方法がわかりません。それをするために。

今のところ私の解決策は、その「ライブラリ」で使用されるWebサービスを使用することです。入力を更新します。Chromeコンソールでオブジェクトを検査するためのURLを見つけました。2番目の入力が変更されたとき、および最初の選択を変更したときに停止するブレークポイントを作成しました。次に、ローカルにあるCascadingDropDownBehaviorオブジェクトを調べて、_ serviceMethod:DでWebサービスのURLを見つけました。

アップデート:

さて、最後に、JavaScriptブラウザランタイムからイベントをトリガーする方法がないように見えるので、API/WSからフェッチするようにlilrubyスクリプトをプログラムしました。これは非常にシンプルで簡単でした。

于 2012-12-19T05:13:44.633 に答える