【问题标题】:Run Javascript code on webbrowser website在 webbrowser 网站上运行 Javascript 代码
【发布时间】:2012-07-14 14:38:13
【问题描述】:

我所拥有的很简单,一个带有 webbrowser-controll 的表单。

该网络浏览器访问一个网站。一切正常。

但是当他在页面上时我不想做的是让他运行一些 javascript 代码(或 jQuery,如果可能的话)来获取网站上 <b></b> 标记之间的所有文本。

我该怎么做?

编辑: 感谢Birk,代码现在看起来像这样:

HtmlElementCollection bigFontTags = webBrowser1.Document.GetElementById("Frame_A").Document.GetElementsByTagName("b");
            string[] textPieces = new string[bigFontTags.Count];
            for (int i = 0; i < bigFontTags.Count; i++) {
                textPieces[i] = bigFontTags[i].InnerText;
            }
            //process text
            string bigText = String.Join(" ", textPieces);
            MessageBox.Show(bigText);

但这不起作用。那是因为我需要获取的元素在框架和框架集的深处......这是布局(简单):

<frameset rows="0,1000" border="0" frameborder="0">

    <frame src="/mail/Login?domain=telfort.nl&amp;style=default&amp;plain=0" name="SContentFrame" id="SContentFrame" scrolling="Auto" noresize="">
    <frameset rows="88,*" framespacing="0" frameborder="0" border="0" bordercolor="#FFFFFF">

        <frameset cols="182,*" framespacing="0" frameborder="0" border="0" bordercolor="#FFFFFF" onunload="ExitLogout()" onload="LoadFrames('/mail/Navigation?sid=1FBE4F29181F18D9358ABC082C7DEE1B6C67481B&amp;userid=marcmeesters%40telfort.nl&amp;seq=+Q&amp;auth=+A&amp;style=default','/mail/MessageList?sid=1FBE4F29181F18D9358ABC082C7DEE1B6C67481B&amp;userid=marcmeesters%40telfort.nl&amp;seq=+Q&amp;auth=+A&amp;srcfolder=INBOX&amp;chk=1&amp;style=default')">

        <frame src="/supp/blank.htm" name="Frame_A" id="Frame_A" frameborder="0" scrolling="Yes" marginwidth="0" marginheight="0" bordercolor="#FFFFFF" border="0">
        <form name="phoenix" method="post" action="" onsubmit="return clickedButton">
And then are here some tables and the content that i want to get.....

那么我怎样才能从那里获得这些内容??? (以一种很好的方式???)

EDIT2: 我将发布网站的生成源:(注意!我已经删除了所有不相关的内容......所以只有从开始到内容的方式)

<html><head>
<title>Telfort - Webmail</title>
<link rel="SHORTCUT ICON" href="http://www.telfort.nl/images/template/favicon.ico">
<link rel="stylesheet" href="/style/telfort/stylesheet.css" type="text/css" media="screen">
<!-- main.tpl 20001107 -->
<script type="text/javascript" src="/supp/phsec.js"></script>
<script type="text/javascript" src="/supp/client_sniffer.js"></script>

<script type="text/javascript" src="chrome-extension://bfbmjmiodbnnpllbbbfblcplfjjepjdn/js/injected.js"></script></head>
<frameset rows="0,1000" border="0" frameborder="0">
    <frame src="/mail/Login?domain=telfort.nl&amp;style=default&amp;plain=0" name="SContentFrame" id="SContentFrame" scrolling="Auto" noresize="">
        <html><head>
        <title>Telfort - Webmail</title>
        <link rel="SHORTCUT ICON" href="http://www.telfort.nl/images/template/favicon.ico">
        <link rel="stylesheet" href="/style/telfort/stylesheet.css" type="text/css" media="screen">
        <!-- main.tpl 20001107 -->
        <script type="text/javascript" src="/supp/phsec.js"></script>
        <script type="text/javascript" src="/supp/client_sniffer.js"></script>
        </head>
        <frameset rows="0,1000" border="0" frameborder="0">
            <frame src="/mail/Login?domain=telfort.nl&amp;style=default&amp;plain=0" name="SContentFrame" id="SContentFrame" scrolling="Auto" noresize="">
                <html><head>
                <title>Telfort - Webmail</title>
                <link rel="stylesheet" href="/style/telfort/stylesheet.css" type="text/css" media="screen">
                <!-- main_frame.tpl 20060510 -->
                <script src="/supp/phif.js" type="text/javascript"></script>
                <script type="text/javascript">
                <!--
                function LoadFrames(t1,t2) {
                  NavWin(frames["Frame_NAV"],t1);
                  NavWin(frames["Frame_A"],t2);
                }

                function ExitLogout() {
                  window.open(NavURL("/mail/Logout?sid=5D3995C305E2F91F575EDF1E2F11F5D75A7DF6D8&userid=marcmeesters%40telfort.nl&seq=+Q&auth=+A&style=default&popup=1"),"Logout","resizable=yes,scrollbars=yes,status=0,width=10,height=10");
                }
                //-->
                </script>
                </head>
                <frameset rows="88,*" framespacing="0" frameborder="0" border="0" bordercolor="#FFFFFF">
                    <frameset cols="182,*" framespacing="0" frameborder="0" border="0" bordercolor="#FFFFFF" onunload="ExitLogout()" onload="LoadFrames('/mail/Navigation?sid=5D3995C305E2F91F575EDF1E2F11F5D75A7DF6D8&amp;userid=marcmeesters%40telfort.nl&amp;seq=+Q&amp;auth=+A&amp;style=default','/mail/MessageList?sid=5D3995C305E2F91F575EDF1E2F11F5D75A7DF6D8&amp;userid=marcmeesters%40telfort.nl&amp;seq=+Q&amp;auth=+A&amp;srcfolder=INBOX&amp;chk=1&amp;style=default')">
                        <frame src="/supp/blank.htm" name="Frame_A" id="Frame_A" frameborder="0" scrolling="Yes" marginwidth="0" marginheight="0" bordercolor="#FFFFFF" border="0">
                            <html><head>
                            <title>Berichtenlijst</title>
                            <!-- folders_msglist.tpl 20001106 -->

                            <link rel="stylesheet" href="/style/telfort/stylesheet.css" type="text/css" media="screen">
                            </head>
                            <body marginwidth="0" marginheight="0">
                            <form name="phoenix" method="post" action="" onsubmit="return clickedButton">

                            AND HERE THE CONTENT!!!!
                            </form>
                    </frameset>
                </frameset>
        </frameset>
</frameset>
</html>

编辑 3: 感谢Birk,问题解决了,这就是答案:

HtmlWindow SContentFrame = webBrowser1.Document.Window.Frames[1];
            HtmlWindow Frame_A = SContentFrame.Document.Window.Frames[2];
            HtmlElementCollection bigFontTags = Frame_A.Document.GetElementsByTagName("b");
            string[] textPieces = new string[bigFontTags.Count];
            for (int i = 0; i < bigFontTags.Count; i++) {
            textPieces[i] = bigFontTags[i].InnerText;
            }
            string bigText = String.Join(" ", textPieces);
            MessageBox.Show(bigText);

【问题讨论】:

  • eval()? (* Lix 鸭子和潜水 *)
  • 好吧,但是我如何在 C# 程序中运行它???
  • 您的最终输出(如果这是针对浏览器的)应该是 HTML 内容。在该 HTML 内容中,您可以嵌入一些 JavaScript 实用程序。我不知道C#,所以我无法真正帮助您解决任何语法问题......对不起......
  • 好的,谢谢你的javascript部分;-)
  • 听起来您想从外部表单获取浏览器中的内容。为此,您不需要 javascript。 WebBrowser 上有一个 DocumentText 属性,您可以在其上进行字符串搜索。如果你想搜索 DOM,有一个 Document 属性。

标签: c# javascript jquery webbrowser-control


【解决方案1】:

创建一个 DocumentCompleted-event 并使用 ((WebBrowser)sender).Document.GetElementsByTagName("b"); 处理所有标签。

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            HtmlElementCollection bigFontTags = ((WebBrowser)sender).Document.GetElementsByTagName("b");
            string[] textPieces=new string[bigFontTags.Count];
            for (int i = 0; i < bigFontTags.Count; i++)
            {
                textPieces[i] = bigFontTags[i].InnerText;
            }
            //process text
            string bigText = String.Join(" ", textPieces);
            MessageBox.Show(bigText);
        }

那不是 JavaScript,但结果完全一样。

编辑#2:对于所有可以使用的嵌套框架:

HtmlElementCollection bigFontTags = webBrowser1.Document.GetElementById("SContentFrame").Document.GetElementById("SContentFrame").Document.GetElementById("Frame_A").Document.GetElementsByTagName("b");

如果我正确理解您的框架集结构,那应该可以。

【讨论】:

  • 好吧,但是我怎么调用那个方法???因为当我按下按钮时我不想得到文本......我已经得到了按钮点击事件......
  • 只需将((WebBrowser)sender) 替换为webBrowser1(或您的网络浏览器的名称)。
  • 该死,如果我希望我首先更新 :D 现在没有错误,但只有一个问题,我不想得到的内容在 iframe 中。该帧的 id 是 (Frame_A)。所以我可以做类似 Document.GetElemntById("Frame_A").Document.GetElementsByTagNme("b") 或者你知道更好的方法吗???
  • 不,我想这是最好的方法。 webBrowser1.Document.GetElementById("Frame_A").Document.GetElementsByTagName("b");
  • 那行不通,那是因为框架太深了。我更新了这个问题,所以你可以理解它有多深;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 2014-05-07
  • 2017-01-24
  • 1970-01-01
相关资源
最近更新 更多