当我尝试使用下面的网址返回脚本值时,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
1 回答

慕哥6287543
TA贡献1831条经验 获得超10个赞
来自硒文档:
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);
- 1 回答
- 0 关注
- 145 浏览
添加回答
举报
0/150
提交
取消