【发布时间】:2016-02-07 11:38:45
【问题描述】:
我正在尝试使用 python 和 selenium 为 instagram 创建一个机器人。 (我不是开发者 javascript 或 python。)
无论如何,我想在execute_script中返回一个带有js的用户数组。
并在 js 脚本中通过 return 获取它。
我的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/
谢谢
【问题讨论】:
-
您的确切问题是什么?
-
你异步调用 get_array_user(),所以它不会等待递归的结果。如果要等待递归,则需要使用回调函数。
-
对不起,我的问题实际上是当我尝试返回我的代码 JS 时,我的数组为空,因为我的脚本在 ole = driver.execute_script 之后运行。
标签: javascript python selenium