为了账号安全,请及时绑定邮箱和手机立即绑定

ChromeWebDriver IJavaScriptExecutor 获取脚本值?

ChromeWebDriver IJavaScriptExecutor 获取脚本值?

C#
子衿沉夜 2023-07-22 16:44:56
当我尝试使用下面的网址返回脚本值时,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);


查看完整回答
反对 回复 2023-07-22
  • 1 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号