IHTMLDOMNode的删除操作
当网页加载完后,我遍历网页的DOM树,找到position属性为fixed的div节点。如果该节点下还包括img、object或iframe节点,就删除掉div节点。用处你们懂的--过滤右下角和两侧广告。
为稳妥起见,我使用IE的开发人员工具做为参考。运行结果是,符合要求的div标签被捕获到了,然后调用IHTMLDOMNode的removeNode(true)删除。
让我不解的是,有些网站的广告div过滤掉了,有些则不行。换成parentNode.removeChild(node)--如果有父结点,也删不掉。比如说金山在线翻译,你查询一个单词后,右下角会出来一个广告窗口。网页比较简单,用IE开发人员工具一看,那个广告div一目了然,也就是说不可能存在我捕获错误的情况。我确实捕获到了那个div,而且,removeNode没有返回null,说明执行成功了,但广告div就是不消失。
请指教
private void button2_Click(object sender, EventArgs e)//点击按钮进行过滤测试
{
IHTMLDocument3 HTMLDocument = (IHTMLDocument3)this.webBrowser1.Document.DomDocument;
IHTMLDOMNode rootDomNode = (IHTMLDOMNode)HTMLDocument.documentElement;
IHTMLDOMNode bodyNode = null;
if (rootDomNode.hasChildNodes())
{
IHTMLDOMChildrenCollection allchild = (IHTMLDOMChildrenCollection)rootDomNode.childNodes;
int length = allchild.length;
for (int i = 0; i < length; i++)
{
IHTMLDOMNode child_node = (IHTMLDOMNode)allchild.item(i);
if (string.Equals(child_node.nodeName,"body",StringComparison.OrdinalIgnoreCase))
{
bodyNode = child_node;
break;
}
}
}
ArrayList del = new ArrayList();
if (bodyNode != null && bodyNode.hasChildNodes())
{
IHTMLDOMChildrenCollection allchild = (IHTMLDOMChildrenCollection)bodyNode.childNodes;
int length = allchild.length;
for (int i = 0; i < length; i++)
{
IHTMLDOMNode child_node = (IHTMLDOMNode)allchild.item(i);
if (string.Equals(child_node.nodeName, "div", StringComparison.OrdinalIgnoreCase))
{
IHTMLDOMNode fix = GetFixedDiv(child_node);
if(fix != null)
{
if (NeedFilter(fix))
{ del.Add(fix); }
}
}
}
for (int i = 0; i < del.Count;++i )
{
IHTMLDOMNode node = (IHTMLDOMNode)del[i];
if (node.hasChildNodes())
{
IHTMLDOMChildrenCollection allchild0 = (IHTMLDOMChildrenCollection)node.childNodes;
int length0 = allchild0.length;
for (int j = 0; j < length0; j++)
{
IHTMLDOMNode child_node = (IHTMLDOMNode)allchild.item(j);
child_node.removeNode(true);
}
}
//if(node.parentNode != null)
//{ node.parentNode.removeChild(node); }
node.removeNode(true);
}
}
}
private IHTMLDOMNode GetFixedDiv(IHTMLDOMNode div)
{
if(div != null)
{
IHTMLStyle style = ((IHTMLElement)div).style;
if (string.Equals("fixed", style.position, StringComparison.OrdinalIgnoreCase))
{
return div;
}
if (div.hasChildNodes())
{
IHTMLDOMChildrenCollection allchild = (IHTMLDOMChildrenCollection)div.childNodes;
int length = allchild.length;
for (int i = 0; i < length; i++)
{
IHTMLDOMNode child_node = (IHTMLDOMNode)allchild.item(i);
if (string.Equals(child_node.nodeName, "div", StringComparison.OrdinalIgnoreCase))
{
IHTMLDOMNode re = GetFixedDiv(child_node);
if(re != null)
{ return re; }
}
}
}
}
return null;
}
private bool NeedFilter(IHTMLDOMNode node)
{
if (node != null && node.hasChildNodes())
{
//this.textBox1.Text += "\n\n";
IHTMLDOMChildrenCollection allchild = (IHTMLDOMChildrenCollection)node.childNodes;
int length = allchild.length;
for (int i = 0; i < length; i++)
{
IHTMLDOMNode child_node = (IHTMLDOMNode)allchild.item(i);
//this.textBox1.Text += (child_node.nodeName + "\n");
if (string.Equals(child_node.nodeName, "img", StringComparison.OrdinalIgnoreCase) ||
string.Equals(child_node.nodeName, "object", StringComparison.OrdinalIgnoreCase) ||
string.Equals(child_node.nodeName, "iframe", StringComparison.OrdinalIgnoreCase))
{
return true;
}
if (NeedFilter(child_node))
{ return true; }
}
}
return false;
}
相关推荐
build-bluez-static.sh
# BlueZ 5.77 交叉编译脚本 (动态链接, 可在 OpenHarmony 上运行) # 工具链: gcc-arm-10.3-2021.07 (arm-none-linux-gnueabihf, glibc 2.33) # # 背景: OpenHarmony 使用 musl libc, 与 glibc 静态二进制不兼容 (NSS 问题) # 方案: 编译为动态链接, 打包 glibc 运行时 .so, 用自定义 ld-linux 启动
国央企在开展内部创新项目时,如何有效进行技术成果的价值评估与资源筛选?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
电力系统风储联合一次调频仿真模型(Simulink仿真实现)
内容概要:本文详细介绍了一个基于Simulink平台构建的电力系统风储联合一次调频仿真模型,重点实现了风电与储能系统协同参与电网频率调节的动态过程。模型核心技术涵盖三电平ANPC并网逆变器控制、DPWMA调制策略、正负序分离与电网前馈控制,并引入虚拟同步发电机(VSG)控制以增强系统惯性与频率响应能力。仿真体系包含双闭环控制、中点电位平衡、虚拟阻抗、统一有源阻尼、孤岛检测等功能模块,支持在不平衡电网、弱电网等复杂工况下进行系统稳定性分析与先进控制策略验证,特别适用于低惯量电力系统中的一次调频研究与SCI级论文成果复现。; 适合人群:面向具备电力电子、电力系统自动化或新能源并网控制背景的研究生、科研人员及工程技术开发者;要求熟悉Matlab/Simulink仿真环境,有逆变器控制或微网运行研究经验者更佳。; 使用场景及目标:①开展风电与储能协同参与电网一次调频的控制策略研究;②验证VSG、下垂控制、模型预测控制(MPC)等先进控制方法在构网型逆变器中的动态性能;③复现高水平期刊论文中的电磁暂态仿真案例,支撑科研立项、论文撰写与工程项目开发。; 阅读建议:建议结合提供的参考文献与配套仿真资料,逐步搭建并调试各功能模块,重点关注控制环路设计、参数整定与阻抗建模方法,通过对比不同扰动工况下的仿真结果,深入理解系统动态响应特性与稳定性机理。
美股分钟级别历史行情数据涵盖1分钟、5分钟、15分钟、30分钟及60分钟等不同周期 每条记录包含日期时间、开盘价、最高价、最低价、收盘价、成交量,部分数据还提供调整后的收盘价及成交笔数 所有数据按股票
美股分钟级别历史行情数据涵盖1分钟、5分钟、15分钟、30分钟及60分钟等不同周期。每条记录包含日期时间、开盘价、最高价、最低价、收盘价、成交量,部分数据还提供调整后的收盘价及成交笔数。所有数据按股票代码和日期组织,便于查看日内走势和交易活跃度。 数据源:CMES金融数据库
科技中介服务机构如何利用数智工具提升技术需求挖掘效率?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。


