2017-12-12 8 views
0

이제 크롤링 웹 사이트에서 일부 데이터를 가져 오려고했습니다.GDownloadUrl 콜백에서 js var 데이터를 가져 오는 방법은 무엇입니까?

대상 웹 사이트는 Google지도를 사용하여 자전거 방송국의 현재 상태를 제공합니다.

GDownloadUrl("/mapAction.do?process=statusMapView", function(data, responseCode) { 

     var jsonData = eval("(" + data + ")"); 
     //alert(jsonData.centerLat); 
     var length = jsonData.markers.length; 
     //if (length > 100) length = 100; 

     for (var i = 0; i < length; i++) { 
      var point = new GLatLng(parseFloat(jsonData.markers[i].lat), parseFloat(jsonData.markers[i].lng)); 
      var name = jsonData.markers[i].name; 
      var cntRackTotal = jsonData.markers[i].cntRackTotal; 
      var cntRentable = jsonData.markers[i].cntRentable; 
      var cntLockOff = jsonData.markers[i].cntLockOff; 
      var cntPrtRack = jsonData.markers[i].cntPrtRack; 
      var percent = jsonData.markers[i].percent; 
      var imgFile = jsonData.markers[i].imgFile; 
      var number = jsonData.markers[i].kiosk_no; 

      //map.addOverlay(createMarker(number, point, name, cntRackTotal, cntRentable, cntLockOff, cntPrtRack, percent, imgFile)); 


     } 
    }); 

이 JS 소스 코드는 대상 웹 사이트에서 사용됩니다. GDownloadUrl 콜백 함수에서 매개 변수 "data"는 자전거 스테이션의 현재 상태를 포함합니다. 데이터를 얻고 싶습니다. 이제 python 셀렌과 execute_script()를 사용해 보았습니다.

jsSourcecode = ("var strData;"+ 
    "strData = GDownloadUrl('/mapAction.do?process=statusMapView',"+ 
    " function(data, responseCode) {return data;}); return strData;") 

data = driver.execute_script(jsSourcecode) 

이 소스 코드는 데이터를 가져 오는 데 사용 된 것입니다. 콜백에 대한 데이터가 var strData에 저장되고 execute_script()의 반환 값이 데이터가 될 것으로 예상됩니다. 하지만 반환 값은 "True"입니다.

js에 대한 지식이 거의 없습니다. 어떻게 데이터를 가져올 수 있습니까? 제발 도와주세요

답변

0

호출중인 함수는 비동기이며 인수로 콜백 함수가 필요합니다.

사용 execute_async_script와 마지막 인수에 존재하는 콜백 제공 :

data, status = driver.execute_async_script(""" 
    var callback = arguments[0]; 
    window.GDownloadUrl('/mapAction.do?process=statusMapView', function(data, status){ 
    callback([data, status]); 
    }); 
    """)