所以我对这个库是盲目的,Runtime,Debugger或Console的官方谷歌文档也没有帮助我找到在控制台窗口中编译脚本的方法……
我只想在控制台窗口中自动插入js脚本,并执行它,如下所示:
我尝试使用Chrome.Runtime.EnableCommand类,然后使用Chrome.Runtime.CompileScriptCommand,但是当我尝试获取生成的CommandResponse< Chrome.Runtime.CompileScriptCommandResponse>时,没有任何反应.调用和等待IChromeSession.SendAsync()函数时的对象(我从未得到过).
我也尝试了相同但使用Chrome.Debugger.EnableCommand类和Chrome.Debugger.SetScriptSourceCommand,只是尝试尝试实验,因为我不知道我应该在这个库中使用什么成员.
好吧,为了展示我在库中尝试的内容,在VB.NET中,我只是从GitHub中获取了C#MasterDevs用法示例,并尝试找到编译脚本的正确命令:
Imports MasterDevs.ChromeDevTools Imports MasterDevs.ChromeDevTools.Protocol Task.Run( Async Sub() Dim chromeProcessFactory = New ChromeProcessFactory(New StubbornDirectoryCleaner()) Using chromeProcess As IChromeProcess = chromeProcessFactory.Create(9222,True) Dim sessionInfo As ChromeSessionInfo = (chromeProcess.GetSessionInfo().Result).LastOrDefault() Dim chromeSessionFactory = New ChromeSessionFactory() Dim chromeSession = chromeSessionFactory.Create(sessionInfo.WebSocketDebuggerUrl) Dim runtimeEnable As New Chrome.Runtime.EnableCommand Dim runtimeEnableResponse As CommandResponse(Of Chrome.Runtime.EnableCommandResponse) = Await chromeSession.SendAsync(runtimeEnable) Dim debuggerEnable As New Chrome.Debugger.EnableCommand Dim debuggerEnableResponse As CommandResponse(Of Chrome.Debugger.EnableCommandResponse) = Await chromeSession.SendAsync(debuggerEnable) Dim compileScript As New Chrome.Runtime.CompileScriptCommand compileScript.Expression = <script>window.open("https://www.youtube.com");</script>.Value Dim compileScriptResponse As CommandResponse(Of Chrome.Runtime.CompileScriptCommandResponse) = Await chromeSession.SendAsync(compileScript) Dim setScriptSource As New Chrome.Debugger.SetScriptSourceCommand() setScriptSource.ScriptSource = <script>window.open("https://www.google.com");</script>.Value Dim setScriptSourceResponse As CommandResponse(Of Chrome.Debugger.SetScriptSourceCommandResponse) = Await chromeSession.SendAsync(setScriptSource) End Using End Sub).Wait()
…请注意,我的代码是垃圾,因为除了打开一个新的chome实例之外,它没有做任何预期的事情.
我之所以使用Chrome.XXXXX.EnableCommand类,是因为我发现了这个问题及其答案:https://groups.google.com/forum/#!topic/chrome-debugging-protocol/tmgIQrkr5zI,由于MasterDevs lib中缺少XML文档,我认为Enablecommand类与该答案中的内容相同.谷歌小组,因为答案说,似乎需要在没有任何东西之前使用EnableCommand类…但我真的不确定Chrome.Runtime.Enablecommand类是否相当于Runtime.enable,无论我是否使用它正确…
我的问题是:
如何在C#或VB.NET中使用MasterDevs ChromeDevTools库在Chrome控制台窗口中插入js代码片段,然后执行它?
解决方法
在项目的github页面上,所有者提到您可能需要使用Chrome团队中的新protocol.json重新构建源代码. (https://chromedevtools.github.io/devtools-protocol/tot/)该文件最近更新于2018年4月9日,但Nuget上的最新版MasterDevs / ChromeDevTools以及他们最后一次通过的构建提交是从2017年11月3日开始.可能最新版本的Chrome可能已经打破了最新版本版本的MasterDevs / ChromeDevTools.
目前,当我写这篇文章时,MasterDevs / ChromeDevTools项目构建失败,您可以获取旧版本并使用当前的protocol.json文件更新它并重新构建它.我会在github项目页面的“问题”部分中提出任何进一步的问题.