Доступ к DOM вкладки Chrome из Visual Studio

Я часто пишу 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? Я думаю, что я исчерпал Google и Stackru и не нашел ничего вообще. Любая помощь будет оценена.

2 ответа

Решение

Я только что пытался понять это для подобных целей. Мораль этой истории заключается в том, что вам нужно либо использовать "Native Messaging" (который Chrome обычно называет развернутым.EXE), либо создать расширение, которое использует JavaScript для взаимодействия с вашим приложением.

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

Это отступление от IE, где вы можете просто назначить базовый DOM для объекта. Chrome не предоставляет API или базовый DOM таким же образом.

Я решил это с помощью сервера WebSocket в C# (SuperWebSocketв NuGet) и Javascript в расширении Chrome для вызова указанного сервера 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);
    }
}
}

Вот пример JavaScript, чтобы попытаться установить новое соединение WebSocket:

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# может передавать расширение JSON Chrome, содержащее элементы поля, которые вы хотите обновить на веб-странице.

Также имейте в виду, что вам необходимо развернуть расширение Chrome в Интернет-магазине Chrome (и, если необходимо, установить частное), иначе оно автоматически отключится.

Вы можете использовать Javascript для доступа к нему.


Расширение Chrome - Получить контент DOM
Я бы поспорил с возможностью сделать это с.NET. Согласно документации, Chrome не предоставляет.NET API. (Если я что-то упустил)

Другие вопросы по тегам