2016-02-07 63 views
0

我試圖使用python和selen來跟蹤instagram。 (我不是顯影劑JavaScript或蟒。)方法execute_script不要等待腳本結束在python中使用selenium返回值

無論如何,我想在execute_script JS返回的用戶的陣列。

並以js腳本返回。

我的Python代碼:

ole = [] 
ole = driver.execute_script("dd = document.getElementsByClassName(\"_8mlbc _t5r8b\"); i = 9; ret = []; before = 0; function need_up() { before = document.getElementsByClassName(\"_4zhc5 _ook48\")[0].title; } function loveu() { if (i == dd.length){return ret;} dd[i].click(); b = setTimeout(need_up, 300);ret.push(before); i++; a = setTimeout(loveu, 400);} return loveu();") 

的可讀性這裏是縮進的JavaScript代碼:

dd = document.getElementsByClassName("_8mlbc _t5r8b"); 
i = 9; 
ret = []; 
before = 0; 
function get_name_user() { 
    before = document.getElementsByClassName("_4zhc5 _ook48")[0].title; 
    } 
function get_array_user() 
{ 
    if (i == dd.length){ 
     return ret; 
    } 
    dd[i].click(); 
    b = setTimeout(get_name_user, 500); 
    ret.push(before); 
    i++; 
    a = setTimeout(get_array_user, 500); 
} 
get_array_user(); 
return ret; 

您可以嘗試在這個網址(用於爲例)這個代碼,它的工作原理ONLY on firefox:https://www.instagram.com/explore/tags/happy/

謝謝

+0

什麼是你確切的問題? – bastelflp

+0

喲異步調用get_array_user(),所以它不會等待遞歸結果。如果你想等待遞歸,你需要使用回調函數。 – Buaban

+0

對不起,我的問題實際上是當我試圖得到我的代碼的返回JS我有一個數組爲空,因爲我的腳本運行後ole = driver.execute_script。 – Fantasim

回答

0

根本原因是您異步調用a = setTimeout(loveu, 400);,因此它立即返回。我想你需要閱讀如何使用setTimeout http://javascript.info/tutorial/settimeout-setinterval

我已通過調用a = loveu();而不是a = setTimeout(loveu, 400);修改了您的代碼,並將其移至function need_up()

ole = [] 
script = """ 
     dd = document.getElementsByClassName("_8mlbc _t5r8b"); 
     i = 9; ret = []; before = 0; 
     function need_up() { 
      before = document.getElementsByClassName("_4zhc5 _ook48")[0].title; 
      ret.push(before); 
      i++; 
      a = loveu(); 
     } 
     function loveu() { 
      if (i == dd.length){return ret;} 
      dd[i].click(); 
      b = setTimeout(need_up, 5000); 
     } 
     return loveu(); 
     """ 
ole = driver.execute_script(script) 
+0

謝謝你!我會閱讀如何使用setTimeout。 – Fantasim

+0

@Fantasim如果我的答案可以解決您的問題,請點擊接受它。 – Buaban