Gavin Matthew 2021-04-16 21:45 采纳率: 25%
浏览 588
已采纳

selenium获取javascript函数中局部变量的值(selenium获取js)

一、问题说明

我用python selenium 执行 js 代码,需要用 js 执行的返回值 在 selenium 其他地方使用。

(我这里是想把 js 获取的 视频时长 传给 selenium 用以 time.sleep(视频时长) 延迟后(即播放完视频)自动播放下一个)

因此我的思路是:通过 局部变量 把 js函数内部的值 赋予全局变量, 然后 return 全局变量。

现在问题是所需要的值在函数内部获取到了,但是传不出来,即 return 出来的是 None。

二、尝试的方法

在 函数内部 var ,return 就找不到;

在 函数外定义 var, return 的就是函数外的,

通过 window 也没起作用。

三、错误代码、软件版本(python3, Chrome)

js_play_end = ''' var video = document.getElementById("video_html5_api"); var _duration = 3.14; var i = setInterval(function(){ if(video.readyState > 0){ console.log("111"); console.log("视频时长: "+Math.floor(video.duration/60)+"分钟"+Math.ceil(video.duration%60)+"秒"); console.log("222"); console.log(video.duration); clearInterval(i); window._duration = video.duration; console.log(window._duration); return window._duration; }, 200); return _duration; video.addEventListener("ended", function () { console.log("本章播放结束,开始下一章"); var par_iframe = window.parent; var par_par_iframe = par_iframe.parent; var _div_2 = par_par_iframe.document.getElementById("right2"); var _div_1 = par_par_iframe.document.getElementById("right1"); _div_2.click(); _div_1.click(); }, false); # js_play_end = 'return document.getElementsByClassName("vjs-duration-display");' _duration = browser.execute_script(js_play_end) print(_duration) time.sleep(300) # time.sleep(float(video_duration)+5) 0

3 条回答 默认 最新

  • 关注

    这个需要延时获取

    js_play_end = ''' var video = document.getElementById("video_html5_api"); var _duration = 3.14; var i = setInterval(function(){ if(video.readyState > 0){ console.log("111"); console.log("视频时长: "+Math.floor(video.duration/60)+"分钟"+Math.ceil(video.duration%60)+"秒"); console.log("222"); console.log(video.duration); window._duration = video.duration; console.log(window._duration); clearInterval(i); }, 200); browser.execute_script(js_play_end) _duration = None while _duration == None: time.sleep(1) _duration = browser.execute_script(''' return window._duration; print(_duration) time.sleep(300)
    本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?
    按下Enter换行,Ctrl+Enter发表内容
  • 有问必答小助手 2021-04-19 11:50
    关注

    您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

    本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?
    按下Enter换行,Ctrl+Enter发表内容
  • 有问必答小助手 2021-04-19 17:26
    关注

    非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
    速戳参与调研>>> https://t.csdnimg.cn/Kf0y

    本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?
    按下Enter换行,Ctrl+Enter发表内容
  • 查看更多回答(2条)

    报告相同问题?

    悬赏问题

    • ¥15 matlab有svec这个函数吗? 无法调用VideoWriter_fourcc VB6.0无法加载网页验证码图片到picturebox中,求解。 C#和GDAL对栅格处理 我现在有一些关于提升机故障的专有文本数据,量也不多,我在label studio上进行了关系和实体的标注,完成了知识图谱的构造,那么我使用生成式模型的话,我能做哪些工作来写我的论文? 电脑连不上无线网络如下诊断反馈应该如何操作 telegram api 使用forward_messages方法转发消息时,目标群组里面会出现此消息来源,如何隐藏? 关于#tensorflow#的问题:有没有什么方法可以让机器自己学会像素风格的图片