【问题标题】:interacting with awesominum webcontrol与 awesomium webcontrol 交互
【发布时间】:2013-02-07 21:29:15
【问题描述】:

你能在 awesomium webcontrol 中找到 HTML 元素来做进一步的处理吗?

例如,我可以使用以下方法在 Watin 中找到必要的元素(甚至是元素集合):

Link playButton = myie.ElementOfType<Link>(Find.ById("myid")); // find link (<a>)
Div test = myie.Div(Find.ById("audio")); // find div (<div>)

找到后 - 您可以提取该元素的多个属性

string classname = playButton.ClassName; // alternatively -> inner text, link, id, class and all bucket of other properties

我如何在 awesomium 中做到这一点?它是否具有内置的 DOM 解析器来操作网站控件? (div、链接、表格等)

到目前为止,我只能找到 javascript 执行命令但这不是我要找的..

另外,我想知道如何将网页的 HTML 保存为字符串(在 awesomium 中)?

string mysite = webControl1.SiteHTML.ToString(); // something like this
// instead of
string mysite = webControl1.ExecuteJavascriptWithResult("document.documentElement.outerHTML").ToString();

编辑:解释

看起来 awesomium 本身不支持 HTML 元素解析,所以我的备份计划如下:

  1. 在 awesomium 中打开网页
  2. 抓取 HTML 到字符串(当前使用:ExecuteJavascriptWithResult())
  3. 将字符串解析为 HTML(当前使用:“HTML Agility pack”)
  4. 做我需要做的事情(查找元素、集合等)
  5. 根据上一步结果在 awesomium 中执行 JS 命令

如果 awesomium 支持 DOM,这一切都会变得更容易.. 但是.. 好吧..

【问题讨论】:

  • “不,你不能” - 结案;(

标签: c# web-controls awesomium


【解决方案1】:

那么JS 把戏怎么样?

public string GetHTML(WebControl control)
{
          return control.ExecuteJavascriptWithResult("document.getElementsByTagName('html')[0].outerHTML");

}

干杯!

【讨论】:

    【解决方案2】:

    是的,我们可以找到 html 元素进行进一步处理。例如;

        dynamic document = (JSObject)webControl.ExecuteJavascriptWithResult("document");
    
    using (document)
                    {
                        try
                    {
                        dynamic email = document.getElementById("email");
                        dynamic password = document.getElementById("password");
    
                        if (email == null && password == null)
                            return;
    
                        using (email)
                        {
                            email.value = "abc@msn.com";
                        }
    
                        using (password)
                        {
                            password.value = "password";
                        }
                    }
                    catch (Exception)
                    {
    
                    }
    
                }
    

    这是我找到 htmlInputElement 的方式,我已经对其进行了测试,它对我有用。

    【讨论】:

      【解决方案3】:

      关于“我如何获得 HTML”问题,我似乎记得在遇到这个问题时使用了一种半骇人听闻的方式:

      var control = <some awesomium WebControl instance>;
      control.SelectAll();
      control.CopyHtml();
      var html = Clipboard.GetText();
      

      【讨论】:

      • 好吧,我希望有一种更原生的方式来复制 HTML。从剪贴板复制肯定不是我所谓的原生(和聪明);)
      • 这很奇怪,但您的方法不起作用..没有任何内容复制到剪贴板。附言是的,我已将 CopyHtml 更改为 CopyHTML。似乎 selectall 没有选择任何东西
      • 这很奇怪......我已经有一段时间没有处理这个问题了,也许我错过了一步。当我回到电脑前时,我会安装一个快速测试工具。
      • 好的。在我的情况下 - SelectAll() 不选择任何东西。这是确认的。但是,如果我单击 webcontrol 然后按 ctrl+A,那么您的方法可以正常工作。 (HTML 被复制到剪贴板)
      • 哦!控件上没有FocusView或类似的吗?
      猜你喜欢
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多