我试图使用python和selenium为Instagram制作一个机器人。 (我不是开发人员javascript或python。)
无论如何,我想在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;
您可以在此网址上尝试此代码(例如),它在firefox上运行仅:https://www.instagram.com/explore/tags/happy/
谢谢
答案 0 :(得分: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)