Tag: dom

寻找C#代码解析器

我正在寻找一组类(最好在.net框架中),它将解析C#代码并返回带有参数,类及其方法,属性等的函数列表。理想情况下,它将提供构建我自己所需的所有内容。智能感知。 我觉得这样的东西应该在.net框架中,考虑到它们提供的所有reflection内容,但如果没有,那么开源替代方案就足够了。 我正在尝试构建的内容基本上类似于Snippet Compiler,但有一点扭曲。 我想弄清楚如何首先获得代码dom。 我试着谷歌搜索,但我不确定这是什么正确的术语,所以我空了。 编辑:因为我希望将它用于类似intellisense的处理,实际编译代码将无法工作,因为它很可能是不完整的。 对不起我应该先提到。

C#:HtmlDocument对象没有构造函数?

那是怎么回事? 看来获取正在运行的HtmlDocument对象的唯一方法是复制mshtml / webbrowser控件的Document属性。 但产卵是sloooooooooooow。 我想避免编写自己的HTML解析器,HtmlAgilityPack是copyleft。 是否有其他来源获取实例化的HtmlDocument,我可以将HTML从字符串转储到? 或者,当使用带有img标签和tr元素的InnerHtml / OuterHtml时,有没有办法覆盖HtmlElement令人讨厌的习惯? 编辑:我指的是System.Windows.Forms.HtmlDocument。 我很抱歉,我还是C#和.Net的新手,对COM以及本主题带来的其他一些事情知之甚少。

XslCompiledTransform输出编码

我的代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Xsl; namespace xslt_samples { class Program { static void Main(string[] args) { XslCompiledTransform myXslTransform = new XslCompiledTransform(); // Here the myXslTransform.OutputSettings is null still… myXslTransform.Load(@”.\in3.xsl”); // The myXslTransform.OutputSettings is not null now, but // I get an exception: the XmlWriterSettings.Encoding read only. myXslTransform.OutputSettings.Encoding = Encoding.UTF8; […]

不使用浏览器控件从字符串获取HtmlDocument

我使用WebClient获取网页的html代码(作为字符串)。 但是我想把它变成一个HtmlDocument对象,所以我可以使用这个类提供的DOMfunction。 目前我知道如何做的唯一方法是使用浏览器控件,如下所示: string pageHtml = client.DownloadString(url); browser.ScriptErrorsSuppressed = true; browser.DocumentText = pageHtml; do { Application.DoEvents(); } while (browser.ReadyState != WebBrowserReadyState.Complete); return browser.Document; 还有另一种方法吗? 我知道还有其他浏览器控件可用,但是有更简单的方法吗?

在IE6 / 7中使用IHTMLElement5 / 6(IE8 / 9)时会发生什么? 它会转向IHTMLElement行为吗?

基本上,IHTMLElement5和IHTMLElement6都是主IHTMLElement的扩展接口,符合以下版本规则: IHTMLElement IE4 IHTMLElement2 IE5 IHTMLElement3 IE5.5 IHTMLElement4 IE6 IHTMLElement5 IE8 IHTMLElement6 IE9 当然,每个新的扩展接口都包含旧成员+自己的新成员,属性等。但是,某些成员(例如.getAttribute)名称相同但已更新。 所以,我的问题是,如果我使用(比方说)IHTMLElement6来声明我的HTML元素并在只安装了IE6的客户端上运行代码,我的对象何时失败并在我设置时保持为Null / Nothing,或者是mshtml.dll足够聪明,可以实现最新情况并默认为IHTMLElement4(实际上是IHTMLElement)行为? 为了澄清括号中的最后一个语句,.getAttribute是在IHTMLElement中添加的,并在IHTMLElement5和IHTMLElement6中更新 – 所以,如果有人只安装了IE6,那么我希望行为默认/恢复为IHTMLElement(不是IHTMLElement4) – 并且如果它不这样做,那么我希望我的代码崩溃。 基本上,我的问题是,究竟会发生什么? 现在,因为我害怕疯了,我只是宣称一切都是IHTMLElement,任何想法? 谢谢。 问题摘要(如果您认为有必要,请阅读,只需要对需要的人进行重新说明):基本上,我希望能够将某些内容声明为IHTMLElement6,以便我可以使用IHTMLElement和IHTMLElement6之间具有相同名称的更新方法(例如.getAttribute)。 这样,在IE9用户上,IHTMLElement6的.getAttribute版本将被利用,同时IHTMLElement的.getAttribute版本仍然适用于(比如说)IE6用户而不会破坏我的代码 – 这就是我的问题所在,当使用IHTMLElement6对象时,即使它是一个IE9接口,IHTMLElement的(IE4接口)版本的.getAttribute会进入/工作还是会得到空引用exception或其他运行时错误? 谢谢大家。 答案越多越好,即使是你的意见并且你不知道这是事实,我想鼓励你仍然发表评论,同时让我们知道你是否知道这是一个事实,或者只是意见/猜猜等等。谢谢。

C#使用WebBrowser控件并需要访问DOM元素

我使用C#在WinForm应用程序中加载了一个网页 我需要以编程方式将数据输入到该页面上的特定字段(不使用WATIN)。 如果有人有任何其他解决方案,我愿意接受。 有问题的页面没有AJAX或JavaScript。 它们是简单的HTML数据输入表单。

在C#中实现动态Web Scraper的逻辑

我期待用C#窗口forms开发Web scraper。 我想要完成的是如下: 从用户获取URL。 在WINForms中的IE UI控件(嵌入式浏览器)中加载网页。 允许用户选择文本(连续,小(不超过50个字符))。 从加载的网页。 当用户希望保留该位置( HTML DOM位置 )时,必须将其持久保存到DB中,以便用户可以在其后续访问期间使用该位置来获取该位置中的数据。 假设加载的网站是一个价格网站,并且引用的费率不断变化,我们的想法是坚持DOM层次结构,这样我下次就可以遍历它。 如果所有HTML元素都具有其id属性,我将能够这样做。 在id为null的情况下,我无法完成此操作。 有人可以建议一个有效的想法(如果可能的话,这是一个最低限度的代码片段)。 即使您可以共享一些在线资源,它也会有所帮助。 谢谢, 维杰

Selenium的GetAttribute方法的并发症

我最近尝试使用selenium RC的GetAttribute方法,但立即遇到了挑战。 我试图执行一个非常简单的selenium.GetAttribute(“//a/@href”)但代码抛出了一个SeleniumException,消息为“ERROR:找不到元素属性:// a / @ href” 。 通过用selenium.GetText(“//a[@href]”)代替GetAttribute调用,我确认一个元素肯定存在,因为这个语句正确地返回了链接的文本。 然后我尝试了: 指向具有不同协议的不同网页(文件:/// vs http://) – 同样的问题。 使用指向不同属性的不同xpath定位器 – 同样的问题。 使用DOM定位器selenium.GetAttribute(“document.getElementsByTagName(‘a’)[0].getAttribute(‘href’)”) – 同样的问题; 稍有不同的错误消息(并且错误消息缺少最后的括号): “错误:元素document.getElementsByTagName(’a’)[0] .getAttribute(’href’not found” 。请注意,此精确表达式在Firebug中正常工作安慰。 使用绝对而不是相对xpath寻址,使用selenium.GetText(“xpath=/html/body/a[@href]”)来确认存在,然后使用selenium.GetAttribute(“xpath=/html/body/a/@href”)获得属性 – 它工作了! 虽然本手册明确指出相对 xpath定位器不需要显式定位器类型(即“xpath =”前缀),但它对绝对 xpath定位器保持沉默; 我从中解释说前缀是必需的。 但出于好奇,我回到了我的相对表达式并添加了显式前缀 – 将selenium.GetAttribute(“//a/@href”)更改为selenium.GetAttribute(“xpath=//a/@href”) – – 这也有效! 最后,我在Selenium IDE中使用非常方便的“ 查找”按钮进行的​​实验表明,它可以很好地处理元素,但是会失败并带有属性。 我可以理解,突出属性没有意义,因为属性不是可见的页面元素,但为什么不突出显示包含属性的元素,并使其以不同的颜色? 也许不是一项微不足道的任务…… 我的问题: 我将上述实验的结果归结为这些问题; 这是我在这里发布的全部目的! 这些似乎对我来说都是一个错误,但如果您认为我的使用不正确或有解决方法,请告诉我: 为什么具有XPath定位器类型的GetAttribute在其他方法(例如GetText)不需要时才需要显式定位器类型? 为什么DOM定位器因“未找到”错误而失败? (该手册还明确指出DOM定位器不需要显式的定位器类型前缀,但我仍然尝试在DOM测试中添加“dom =”作为前缀;它仍然失败。) 为什么Selenium IDE在尝试突出显示(查找)属性时不会更优雅地失败? […]

使用C#以编程方式删除HtmlElement对象

在WebBrowser控件中,如何删除HtmlElement对象? HtmlElement类中没有方法可以实现此目的。 作为一种解决方法,我可以创建一个“虚拟” HtmlElement (不将其插入到HtmlDocument ),然后我将其插入(通过AppendChild )要删除的HtmlElement对象。 这感觉就像一个黑客。 有一个更好的方法吗? PS我想在内存中保留HtmlElement以便以后使用,而不是简单地将其破坏(这是将其父内部的innerHtml设置为空字符串会做什么)

C#Web浏览器,单击并突出显示

在我开始编码之前,我想我会看到这里是否有人知道已经建立的任何开源(或付费)等价物。 我正在寻找一个浏览器控件,用户可以在其中预览网页,然后突出显示它的元素,一旦突出显示,我可以获得所选元素的div或id。 有没有人见过这样的事情?