Доступ к 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. (Если я что-то упустил)