使用Apps脚本提交表单问题

时间:2013-03-12 03:11:08

标签: google-apps-script

我正在尝试获取以下页面

http://www.stluciesheriff.com/inmate_list.php

使用UrlFetchApp类中的fetch()方法

要使上述页面显示结果,您必须在

处提交表单

http://www.stluciesheriff.com/inmate_search.php

我尝试使用fetch(url,payload)方法复制表单数据和标题,但是对于我的生活,我无法弄清楚如何让它返回我想要的实际数据

这是我的尝试

function grabdata() {
  //var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");

  var postdata = {
    "First":"",
    "Last":"",
    "When":2,
    "Submit":"Search"
  };

  var payload = {
    "method":"POST",
    "payload":postdata
  };

  var data = UrlFetchApp.fetch("http://www.stluciesheriff.com/inmate_list.php",payload);
  Logger.clear();
  Logger.log(data.getContentText());
  return e; // intentional error thrown for debugger
}

我有一种感觉,我错过了一些明显的东西,因为我从来没有真正体验过从需要POST数据的网站获取数据。

1 个答案:

答案 0 :(得分:0)

您可以使用Google提供的Xml Service。 Xml库可以将html一直解析为您需要的特定元素。我使用Chrome检查器来确定我需要哪个元素。

我写了一些示例脚本来帮助你。

  var data = UrlFetchApp.fetch("http://www.stluciesheriff.com/inmate_list.php",payload);
  var entries = [];
  var xml = Xml.parse(data.getContentText(), true);
  var resultTable = xml.getElement().getElement("body").getElement("table").getElements("tr")[2]
        .getElements("td")[1].getElement("table").getElements("tr")[4].getElement("td").getElement("table");
  var tableRows = resultTable.getElements("tr");
  for (var i=1; i<tableRows.length; i++) {
    entries.push(extractDataFromRow(tableRows[i]));
  }

  Logger.log(Utilities.jsonStringify(entries));
  return entries;
}

function extractDataFromRow(row) {
  var obj = {};
  var tds = row.getElements("td");
  obj.name = tds[0].getElement("a").getText();
  obj.dob = tds[1].getText();
  obj.age = tds[2].getText();
  obj.inmate_id = tds[3].getText();
  obj.booking = tds[4].getText();
  return obj;
}