Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以将selenium中的js PROMISE值作为变量返回?_Javascript_Python_Selenium - Fatal编程技术网

Javascript 是否可以将selenium中的js PROMISE值作为变量返回?

Javascript 是否可以将selenium中的js PROMISE值作为变量返回?,javascript,python,selenium,Javascript,Python,Selenium,我确实使用JS脚本通过xmlhttprequests获得一件事。我需要将该值传递回selenium,以便继续执行进一步的操作。我的代码始终不返回任何值,即使已分配并返回全局变量。我在某个地方读到,不可能恢复原始承诺值 var request = "" function send(method,url,data){ const xhr = new XMLHttpRequest(); const promise = new Promise(funct

我确实使用JS脚本通过xmlhttprequests获得一件事。我需要将该值传递回selenium,以便继续执行进一步的操作。我的代码始终不返回任何值,即使已分配并返回全局变量。我在某个地方读到,不可能恢复原始承诺值

    var request = ""

    function send(method,url,data){
        const xhr = new XMLHttpRequest();
        const promise = new Promise(function(resolve,reject){
            xhr.open(method, url)
            xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhr.onload = function(){
                const raw_content = String(xhr.response)
                const start_index = raw_content.indexOf("request")
                const end_index = raw_content.indexOf("</settings>")
                const x_request = raw_content.substring(start_index+("request=").length+1, end_index-3)
                resolve(x_request)
            };
            xhr.send(data)
        });
        return promise;
    };

    async function final(){
        await send("POST", "https://www.thecrims.com/login",data).then((responseData)=>{
            request = responseData
            return responseData
        });
    };

final();
return request
var request=“”
函数发送(方法、url、数据){
const xhr=new XMLHttpRequest();
常量承诺=新承诺(函数(解析、拒绝){
xhr.open(方法、url)
setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded”);
xhr.onload=函数(){
常量原始内容=字符串(xhr.response)
const start\u index=raw\u content.indexOf(“请求”)
const end_index=raw_content.indexOf(“”)
const x_request=raw_content.substring(start_index+(“request=”).length+1,end_index-3)
解决(x_请求)
};
发送(数据)
});
回报承诺;
};
异步函数final(){
等待发送(“POST”https://www.thecrims.com/login,数据)。然后((响应数据)=>{
请求=响应数据
返回响应数据
});
};
最后的();
退货申请

当我将上述代码放入driver.execute_脚本并尝试打印它时,它将不返回任何内容或不返回任何内容。有没有其他方法可以得到这个值

找到了解决方法:)我使用变量的内容运行警报消息,并使用selenium对该警报进行刮除。

好吧,您必须对
最终
方法做一些小的更改

async function final(){
        const val = await send("POST", "https://www.thecrims.com/login",data).then((responseData)=>{
            request = responseData
            return responseData
        });
     return val;
    };
这应该返回值

下面是我为验证场景所做的示例测试

jsFunction1 = """window.send =function(method,url){ const xhr = new XMLHttpRequest();
        const promise = new Promise(function(resolve,reject){
            xhr.open(method, url)
            xhr.setRequestHeader("Content-type", "application/json");
            xhr.onload = function(){
                const raw_content = String(xhr.response)
                resolve(raw_content)
            };
            xhr.send()
        }); return promise }; """

jsFunction2 = """window.final =function(){const val =send("get","https://jsonplaceholder.typicode.com/users").then((responseData)=>{
            return responseData
        }); return val}; """

# load the function so that you can call where ever you want
driver.execute_script(jsFunction1)
driver.execute_script(jsFunction2)
value = driver.execute_script("return final()")
print(value)

使用承诺的方式与声明变量的方式相同

const value = yourPromise().then(value => { return value })
或者在使用selenium的python中:

driver.execute_脚本(“returnyourpromise().then(value=>{returnvalue})”)

您是否先从浏览器控制台尝试过此操作?尝试在
final
功能中打印
responseData
。通过这种方式,您可以确定问题是否与响应数据有关。如果您需要在浏览器控制台中测试代码的帮助,请告诉我。@supputuri代码可以工作,但我仍然可以;t在python中返回值:(甚至可以返回承诺值吗?