JavaScript:使用Xpath定位网页元素(含Iframe定位)

一、非Iframe内元素使用Xpath定位

  1. 在JS中定义使用Xpath的函数

注:在Chrome开发者工具Console中可以直接使用该函数,无需定义

function $x(STR_XPATH) {
	var xresult = document.evaluate(STR_XPATH, document, null, XPathResult.ANY_TYPE, null);
	var xnodes = [];
	var xres;
	while (xres = xresult.iterateNext()) {
		xnodes.push(xres);
	}
	return xnodes;
}

二、Iframe内元素使用Xpath定位(非跨域Iframe)

  1. 改进Xpath方法,将document作为参数,即可实现在Iframe中使用Xpath定位元素
function $x(DOCUMENT, STR_XPATH) {
	var xresult = DOCUMENT.evaluate(STR_XPATH, DOCUMENT, null, XPathResult.ANY_TYPE, null);
	var xnodes = [];
	var xres;
	while (xres = xresult.iterateNext()) {
		xnodes.push(xres);
	}
	return xnodes;
}
  1. 通过ID或Class属性定位Iframe,可以通过以下代码可以获取到Iframe内的document对象
document.getElementById('iframe的ID').contentWindow.document // 通过ID定位
document.getElementsByClassName('iframe的Class').contentWindow.document // 通过Class定位

三、实战案例(以获取QQ邮箱中收件列表为例)

1. 定位Iframe元素

// 方式一:使用getElementById()定位Iframe
var iframe_document = document.getElementById('mainFrame').contentWindow.document;
// 方式二:使用Xpath定位Iframe
var iframe_document = $x(document, "//iframe[@id='mainFrame']")[0].contentWindow.document;

2. 获取所有邮件标题和概要

function get_email_infos(){
	var email_infos = [];
	var iframe_document = document.getElementById('mainFrame').contentWindow.document;
	var emails = $x(iframe_document, "//table[contains(@class, 'i') and not(contains(@class, 'bold'))]");	
	for(var k in emails){
		var email_title = emails[k].getElementsByClassName("tt")[0].textContent;
		var email_desc = emails[k].getElementsByClassName("no")[0].textContent;
		email_infos.push({'title': email_title, 'desc': email_desc});
	}
	return email_infos;
}
  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值