猿问

ChromeWebDriver IJavaScriptExecutor 获取脚本值?

当我尝试使用下面的网址返回脚本值时,ChromeDriver v75.0.3770.140 遇到一个奇怪的问题,它返回一个空值。


   var driver = new ChromeDriver();

    driver.Navigate().GoToUrl("https://www.6pm.com/p/adidas-team-issue-ii-sackpack-white-jersey-black-clear-lilac-purple/product/9045515/color/749092");


    IJavaScriptExecutor js = (IJavaScriptExecutor)driver;

    var val2 = js.ExecuteScript("return window.zfcSessionId"); // work fine

    var val = js.ExecuteScript("return window.__INITIAL_STATE__;"); // nullreference


子衿沉夜
浏览 204回答 1
1回答

慕哥6287543

来自硒文档:ExecuteScript(String,Object[] ) 方法在当前选定的框架或窗口的上下文中执行 JavaScript。这意味着“文档”将指当前文档。如果脚本有返回值,则将执行以下步骤:对于 HTML 元素,此方法返回一个IWebElement对于数字,Int64返回a对于布尔值,Boolean返回a对于所有其他情况,返回一个字符串。对于数组,我们检查第一个元素,并尝试返回List<T>该类型的 a,遵循上述规则。不支持嵌套列表。如果值为null或者没有返回值,则返回null。在您的情况下,__INITIAL_STATE__是一个JSON不满足上述任何返回类型的对象。不要从网页获取 JSON 对象,而是尝试在 C# 代码中获取序列化字符串(通过执行JSON.stringify):var val = js.ExecuteScript("return JSON.stringify(window.__INITIAL_STATE__)");在这种情况下,返回值是字符串。从这里,您可以使用以下方法反序列化它:dynamic data = JsonConvert.DeserializeObject(val);
随时随地看视频慕课网APP
我要回答