如何在.NET中使用MasterDevs ChromeDevTools?

时间:2018-04-04 12:29:55

标签: c# .net vb.net google-chrome google-chrome-devtools

MasterDevs ChromeDevTools是一个与Chrome开发者工具交互的.NET库,我昨天在搜索使用chrome websockets协议的有效和最简单的方法时发现它,我试图管理怎么能我在控制台窗口中编译了一个自定义的javascript脚本,但我没有找到这样做的方法,因为库是巨大的,每个成员的XML文档非常非常非常差,所以你可以&# 39;理解任何成员的目的,作者只提供了一个很小的用法示例,说明如何使用lib中数千个逗号的两个特定命令。因此,我不知道如何使用此库与控制台交互,在控制台窗口中输入脚本并进行编译。

所以我对此图书馆视而不见,而RuntimeDebuggerConsole的官方google文档也无法帮我找到编译脚本的方法在控制台窗口中......

我只是想在控制台窗口中自动插入js脚本,并执行它,如下所示:

enter image description here

我尝试使用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文档,我认为{{ 1}}类与谷歌小组的答案中所说的相同,并且因为答案是什么,似乎需要在没有任何内容之前使用Enablecommand课程......但我真的不确定是否EnableCommand类相当于Chrome.Runtime.Enablecommand,无论我是否正确使用它......

我的问题是:

如何在C#或VB.NET中使用 MasterDevs ChromeDevTools 库在Chrome控制台窗口中插入js代码段,然后执行它?

1 个答案:

答案 0 :(得分:1)

我想说项目需要更新。

在项目的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项目页面的“问题”部分中提出任何进一步的问题。