javascript - ruby 变量在 driver.execute_script 之后返回 nil

标签 javascript jquery ruby ajax selenium-webdriver

我试图返回一串用逗号分隔的很长的网址。该代码在控制台中运行良好,但是当我执行脚本时,ruby 变量 urls_list 为零。

require 'rubygems'
require 'selenium-webdriver'
require 'json'


driver = Selenium::WebDriver.for :firefox
    driver.manage.timeouts.implicit_wait = 20

driver.get "https://go.urbanairship.com/accounts/login/"
username = driver.find_element(:id, "id_username").send_keys "????"
password = driver.find_element(:id, "id_password").send_keys "????"
submit = driver.find_element(:class, "important").click

urls_list = driver.execute_script( "
     var urls = [];
     for (var i = 1; i < 37; i ++) {
       (function (i){
         $.getJSON('https://go.urbanairship.com/apps/-/list/'+ i + '/per_page=20').then(function(data) {   
            var json = data;
            for (var j = 0; j < json.objects.length; j++) {
              var url = json.objects[j].url
              urls.push(url);
             }  
          });
       }(i));

     }
     urls.toString();

")

sleep 10
puts urls_list # urls_list is nil

最佳答案

您必须向驱动程序提供更多有关脚本返回内容的提示。

例如,将其更改为:

return urls.toString();

关于javascript - ruby 变量在 driver.execute_script 之后返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21712395/

相关文章:

javascript - 使用第三方React UI库时找不到模块 'react' - Vite + Preact

javascript - 如何在 jquery 中的 foreach 之后插入最后一项?

mysql - 如何使用 Ruby 作为脚本语言连接到 Rails 之外的 MySql 数据库

javascript - 将参数传递给状态导致元素不显示

javascript - FixedHeader 的问题

javascript - React Native 上的背景图片和 ScrollView

javascript - 如何使用 jQuery ajax 数据变量

javascript - 如果使用 document.write,则无法以编程方式插入 js

ruby - 了解范围和数组中的 ruby​​ splat

ruby - 控制多机 Vagrant block 执行顺序