gpt4 book ai didi

dom - Google Apps Script 是否有类似 getElementById 的内容?

转载 作者:行者123 更新时间:2023-12-04 23:20:59 24 4
gpt4 key购买 nike

我将使用 Google App Script 从电台网站获取节目列表。
如何通过指定元素的id来选择网页中指定的元素?
因此,我可以获取网页中的程序。

最佳答案

2013 年 12 月编辑: Google 已弃用旧版 Xml服务,将其替换为 XmlService .此答案中的脚本已更新为使用新服务。新服务需要符合标准的 XML 和 HTML,而旧服务则可以容忍缺少关闭标签等问题。

看看 Tutorial: Parsing an XML Document . (截至 2013 年 12 月,本教程仍然在线,但不推荐使用 Xml 服务。)从该基础开始,您可以利用 Script Services 中的 XML 解析来导航页面。这是一个在您的示例上运行的小脚本:

function getProgrammeList() {
txt = '<html> <body> <div> <div> <div id="here">hello world!!</div> </div> </div> </html>'

// Put the receieved xml response into XMLdocument format
var doc = Xml.parse(txt,true);

Logger.log(doc.html.body.div.div.div.id +" = "
+doc.html.body.div.div.div.Text ); /// here = hello world!!

debugger; // Pause in debugger - examine content of doc
}

要获取真实页面,请从以下开始:
var url = 'http://blah.blah/whatever?querystring=foobar';
var txt = UrlFetchApp.fetch(url).getContentText();
....

如果您查看 getElements 的文档您会看到支持检索特定标签,例如“div”。它会查找特定元素的直接子元素,而不是探索整个 XML 文档。您应该能够编写一个函数来遍历检查 id 的文档。每个 div元素,直到它找到您的程序列表。
var programmeList = findDivById(doc,"here");

编辑 - 我忍不住了...

这是一个实用函数,可以做到这一点。
/**
* Find a <div> tag with the given id.
* <pre>
* Example: getDivById( html, 'tagVal' ) will find
*
* <div id="tagVal">
* </pre>
*
* @param {Element|Document}
* element XML document or element to start search at.
* @param {String} id HTML <div> id to find.
*
* @return {XmlElement} First matching element (in doc order) or null.
*/
function getDivById( element, id ) {
// Call utility function to do the work.
return getElementByVal( element, 'div', 'id', id );
}

/**
* !Now updated for XmlService!
*
* Traverse the given Xml Document or Element looking for a match.
* Note: 'class' is stripped during parsing and cannot be used for
* searching, I don't know why.
* <pre>
* Example: getElementByVal( body, 'input', 'value', 'Go' ); will find
*
* <input type="submit" name="btn" value="Go" id="btn" class="submit buttonGradient" />
* </pre>
*
* @param {Element|Document}
* element XML document or element to start search at.
* @param {String} elementType XML element type, e.g. 'div' for <div>
* @param {String} attr Attribute or Property to compare.
* @param {String} val Search value to locate
*
* @return {Element} First matching element (in doc order) or null.
*/
function getElementByVal( element, elementType, attr, val ) {
// Get all descendants, in document order
var descendants = element.getDescendants();
for (var i =0; i < descendants.length; i++) {
var elem = descendants[i];
var type = elem.getType();
// We'll only examine ELEMENTs
if (type == XmlService.ContentTypes.ELEMENT) {
var element = elem.asElement();
var htmlTag = element.getName();
if (htmlTag === elementType) {
if (val === element.getAttribute(attr).getValue()) {
return element;
}
}
}
}
// No matches in document
return null;
}

将此应用于您的示例,我们得到:
function getProgrammeList() {
txt = '<html> <body> <div> <div> <div id="here">hello world!!</div> </div> </div> </html>'

// Get the receieved xml response into an XML document
var doc = XmlService.parse(txt);

var found = getDivById(doc.getElement(),'here');
Logger.log(found.getAttribute(attr).getValue()
+ " = "
+ found.getValue()); /// here = hello world!!
}

注:this answer有关使用这些实用程序的实际示例。

关于dom - Google Apps Script 是否有类似 getElementById 的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16695034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com