1

你能在 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 敏捷包”)
  4. 做我需要做的事情(查找元素、集合等)
  5. 根据上一步结果在 awesomium 中执行 JS 命令

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

4

3 回答 3

6

还有一个JS技巧怎么样?

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

}

干杯!

于 2014-04-28T16:37:32.310 回答
1

是的,我们可以找到 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 的方式,我已经对其进行了测试,它对我有用。

于 2013-07-17T09:53:29.793 回答
0

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

var control = <some awesomium WebControl instance>;
control.SelectAll();
control.CopyHtml();
var html = Clipboard.GetText();
于 2013-02-07T21:43:40.647 回答