从Visual Studio访问Chrome标签的DOM

时间:2017-05-18 08:58:24

标签: c# vb.net visual-studio google-chrome dom

我经常写c#VB.net,使用以下内容访问和修改DOM页面的Internet Explorer

SHDocVw.InternetExplorer IE = shell.Windows().Item(i);
mshtml.HTMLDocument doc = IE.Document;
mshtml.IHTMLElement o = doc.getElementById(sID);

如何访问DOM中打开的网页Chrome?我想我已经筋疲力尽了谷歌和stackoverflow,并没有真正找到任何东西。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以使用Javascript访问它。


Chrome Extension - Get DOM content 我打赌不能用.NET做到这一点。根据文档,Chrome不提供.NET API。 (除非我错过了什么)

答案 1 :(得分:0)

我刚刚尝试将其弄清楚用于类似目的。故事的道德是您需要使用“Native Messaging”(Chrome基本上称为已部署的.EXE)或创建使用JavaScript与您的应用程序通信的扩展。

https://developer.chrome.com/extensions https://developer.chrome.com/extensions/nativeMessaging

这与IE不同,您只需将基础DOM分配给对象即可。 Chrome不会以相同的方式公开API或底层DOM。

我解决这个问题的方法是在C#中使用WebSocket服务器(NuGet中为SuperWebSocket),在Chrome扩展中使用Javascript来调用所述WebSocket服务器。对于Chrome扩展程序,JavaScript在后台运行,因此您可以连接并建立会话以来回传递消息。

以下是如何启动WebSocket客户端的示例: https://github.com/kerryjiang/SuperWebSocket/blob/master/Samples/BasicConsole/Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SuperSocket.SocketBase;

namespace SuperWebSocket.Samples.BasicConsole
{
class Program
{
    static void Main(string[] args)
    {
         Console.WriteLine("Press any key to start the WebSocketServer!");

        Console.ReadKey();
        Console.WriteLine();

        var appServer = new WebSocketServer();

        //Setup the appServer
        if (!appServer.Setup(2012)) //Setup with listening port
        {
            Console.WriteLine("Failed to setup!");
            Console.ReadKey();
            return;
        }

        appServer.NewMessageReceived += new SessionHandler<WebSocketSession, string>(appServer_NewMessageReceived);

        Console.WriteLine();

        //Try to start the appServer
        if (!appServer.Start())
        {
            Console.WriteLine("Failed to start!");
            Console.ReadKey();
            return;
        }

        Console.WriteLine("The server started successfully, press key 'q' to stop it!");

        while (Console.ReadKey().KeyChar != 'q')
        {
            Console.WriteLine();
            continue;
        }

        //Stop the appServer
        appServer.Stop();

        Console.WriteLine();
        Console.WriteLine("The server was stopped!");
        Console.ReadKey();
    }

    static void appServer_NewMessageReceived(WebSocketSession session, string message)
    {
        //Send the received message back
        session.Send("Server: " + message);
    }
}
}

以下是尝试新的WebSocket连接的示例JavaScript:

function attemptConnection() {


if (!connectionMade) {
    var exampleSocket = new WebSocket("ws://localhost:8080");

    exampleSocket.onopen = function () {
        connectionMade = true;
    };

    exampleSocket.onmessage = function (event) {
    //msg received from C#          
    }

    exampleSocket.onerror = function () {
        //do nothing
    }

    exampleSocket.onclose = function () {
        connectionMade = false;
    }


}



}

您可以使用所需的任何WebSocket服务器库。它的要点是Chrome扩展程序打开与您的应用程序的通信线路,然后两个来回传递Chrome扩展程序或应用程序可以作用的消息。例如,C#可以传递包含您要在网页上更新的字段元素的Chrome扩展JSON。

此外,请注意,您必须将Chrome扩展程序部署到Chrome网上应用店(如果需要,可以设置为私有),否则它会自动停用。