我经常写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,并没有真正找到任何东西。任何帮助将不胜感激。
答案 0 :(得分:0)
您可以使用Javascript访问它。
答案 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网上应用店(如果需要,可以设置为私有),否则它会自动停用。