如何从GDownloadUrl回调中获取js var数据?

时间:2017-12-12 14:15:28

标签: javascript selenium callback

现在,我试图从抓取网站获取一些数据。

目标网站使用谷歌地图提供自行车站的当前状态。

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回调函数中,参数&#34; data&#34;包含自行车站的当前状态。我想获得数据。 现在,我尝试使用python selenium和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()的返回值就是数据。但是返回值只是&#34; True&#34;。

我对js知之甚少..如何获取数据?请帮忙

1 个答案:

答案 0 :(得分: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]);
  });
  """)