我创建一个包含3个工作表的电子表格,“链接”,“有效链接”和“无效链接”,然后使用以下代码检查“链接”表中的每一行,如下所示:
function myFunction() {
var rows = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Links").getDataRange().getValues();
rows.forEach(function(row, index)
{
if (index !== 0)
{
var url = row[1];
var page = UrlFetchApp.fetch(url).getContentText();
var number = page.match("sample.com");
if (!number)
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Valid Links").appendRow(url);
else
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Invalid Links").appendRow(url);
}
});
}
但是,当我调试到UrlFetchApp.fetch(url)时,脚本突然中止。没有显示错误或异常。为什么?
我在Google Script Community上问了这个问题,但没有人回答。所以我不得不在这里问。我不知道如何在Google Script社区中获取问题的特定URL,因此我必须复制并粘贴问题。对于那个很抱歉。
更新资料
在Tanaike的帮助下,我修复了我的错误:
我认为row [1]引用了A列,但实际上它引用了B列,这是一个未定义的值,因此会引起bug。
!number应该更改为number,好像(number)表示匹配,因此结果是有效的链接。
我相信您的目标如下。
Valid Links
和工作Invalid Links
表中UrlFetchApp.fetch
。Links
。muteHttpExceptions
用作选项UrlFetchApp.fetch
?这样,即使请求失败,也可以检索响应值。
muteHttpExceptions
是false
。在这种情况下,当请求发生错误时,脚本将停止。看来这是当前的规范。但是,当muteHttpExceptions
是true
时,脚本甚至没有当请求发生错误而停止。appendRow(url)
使用且var url = row[1];
是“ B”列中的值。在这种情况下,url
必须为[url]
。var number = page.match("sample.com");
,当sample.com
包含在中时page
,url
放在Invalid Links
表格中。当sample.com
不包含在时page
,url
放在Valid Links
表中。我不确定这是否是您期望的结果。但是请注意这一点。var ss = SpreadsheetApp.getActiveSpreadsheet();
使用时,加工成本将可以降低一些。当以上几点反映到您的脚本时,它将变为以下内容。
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); // Added
var rows = ss.getSheetByName("Links").getDataRange().getValues(); // Added
rows.forEach(function(row, index) {
if (index !== 0) {
var url = row[1];
var page = UrlFetchApp.fetch(url, {muteHttpExceptions: true}).getContentText(); // Modified
var number = page.match("sample.com");
if (!number) {
ss.getSheetByName("Valid Links").appendRow([url]); // Added
} else {
ss.getSheetByName("Invalid Links").appendRow([url]); // Added
}
}
});
}
fetchAll
被使用时,工艺成本可能能够减少更多。但是我不确定URL的数量。所以我像上面那样修改了脚本,没有使用fetchAll
方法。关于以下新问题,
另一个问题是,当url为wisesoft.co.uk时,我收到错误SSL错误wisesoft.co.uk(第10行,文件“代码”),脚本也中止了。我使用Chrome浏览器,发现https有错误,但是可以通过http版本访问该网站,如何忽略此类错误并继续获取内容?
在这种情况下,如何使用try...catch
以下内容?
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var rows = ss.getSheetByName("Links").getDataRange().getValues();
rows.forEach(function(row, index) {
if (index !== 0) {
var url = row[1];
try {
var page = UrlFetchApp.fetch(url, {muteHttpExceptions: true}).getContentText();
var number = page.match("sample.com");
if (!number) {
ss.getSheetByName("Valid Links").appendRow([url]);
} else {
ss.getSheetByName("Invalid Links").appendRow([url]);
}
} catch(e) {
ss.getSheetByName("Invalid Links").appendRow([url]);
}
}
});
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句