Как динамически загружать внешние AJAX веб-страниц в Google Apps Script? - PullRequest
2 голосов
/ 27 мая 2020

Я хочу загрузить веб-страницу, созданную с помощью JS (например, AngularJS или аналогичного), а затем очистить ее, используя (только) скрипт Google Apps. Как я могу выполнить sh это?

Я ищу что-то вроде:

const response = UrlFetchApp.fetch( urlToExternalJsPage );
const content = response.getContentText();
// scrape content

Только, может быть, заменить UrlFetchApp на вызов библиотеки или что-то в этом роде? Возможно, библиотека Puppeteer для GAS, библиотека Cheerio для GAS или что-то еще?

Как я могу загрузить загруженную извне страницу JS и прочитать HTML с этой страницы после того, как сгенерирован, чтобы очистить его?

Идея 1

Я наткнулся на эту статью: Лучший способ загрузки Javascript, который предоставляет следующий код.

function loadScript(url, callback){
  var script = document.createElement("script")
  script.type = "text/javascript";
  if (script.readyState){  //IE
    script.onreadystatechange = function(){
      if (script.readyState == "loaded" || script.readyState == "complete"){
        script.onreadystatechange = null;
        callback();
      }
    };
  } else {  //Others
    script.onload = function(){
      callback();
    };
  }
  script.src = url;
  document.getElementsByTagName("head")[0].appendChild(script);
}

Фактический код на вашей странице в конечном итоге выглядит следующим образом:

<script type="text/javascript" src="http://your.cdn.com/first.js"></script>
<script type="text/javascript">
  loadScript("http://your.cdn.com/second.js", function(){
    //initialization code
  });
</script>

Проблема с этим подходом в том, что я стараюсь оставаться строго на стороне сервера. Я не пытаюсь публиковать какие-либо HTML страницы и / или обслуживать их.

Идея 2

Я наткнулся на эту статью , которая, кажется, описывает какую-то библиотеку Puppeteer для ГАЗА. Я перевел его с японского с помощью Google Translate. Проблема в том, что для этого нужно использовать Google Cloud Platform, и я хочу этого избежать. Я также хочу избежать выставления счетов и просто оставаться в рамках скрипта Google Apps.

Idea 3

Возможно, есть способ использовать браузер, который поставляется со службой пользовательского интерфейса. В частности, боковая панель?

На этой странице я нашел следующий пример импорта веб-страниц на страницу службы HTML с использованием IFRAME.

Code.gs
function doGet() {
  var template = HtmlService.createTemplateFromFile('top');
  return template.evaluate();
}
верх. html
<!DOCTYPE html>
<html>
 <body>
   <div>
     <a href="http://google.com" target="_top">Click Me!</a>
   </div>
 </body>
</html>
...