

rubyを使ってウェブサイトのスクレイピングを行っているのですが、対象のページの中に以下のような部分がありました。

[code]

    <script>
    function tableCell(str){
        document.write('<td class="cell-text">');
        document.write(str);
        document.write('</td>');
    }
    </script>
    
    <table>
      <tr>
        <script>
          <!--
          tableCell("100");
          tableCell("200");
          tableCell("300");
          //-->
        </script>
      </tr>
    </table>
    
[/code]

初めはSeleniumを使っていたのですが、処理を軽くするために`script`タグ内を単なるテキストとして読み込みパースすることにしました。

ただこの方法ですと改行部位やちょっとした変更でエラーになってしまうので、できればjsの関数をシェルからこんな感じで実行できたらいいなと考えたのですが方法が見つかりませんでした。

[code]

    javascript table_cell.js page.html > output.html
    
[/code]

シェルで使えるjavascript実装の`Rhino`を試してみましたがhtml内部のscriptタグ部分だけを実行する方法がわかりませんでした。

ローカルのhtmlファイル内の`script`タグ内にある関数を実行し、その結果を出力する方法は何かありますか？


CC BY-SA 4.0
2020-04-03T21:54:16.187
65341
2020-04-05T04:02:05.983
3271
question
javascript html
特定のjavascriptの関数をローカルのhtmlのscriptタグ内に対して適用させる方法


本質的にはSeleniumとあまり変わりませんがChromeのheadlessモードでも実現できます。

[code]

    chrome --headless --disable-gpu --dump-dom file:///foobar/page.html
    <html><head><script>
    function tableCell(str){
        document.write('<td class="cell-text">');
        document.write(str);
        document.write('</td>');
    }
    </script>
    
    </head><body><table>
      <tbody><tr>
        <script>
          <!--
          tableCell("100");
          tableCell("200");
          tableCell("300");
          //-->
        </script><td class="cell-text">100</td><td class="cell-text">200</td><td class="cell-text">300</td>
      </tr>
    </tbody></table></body></html>
    
[/code]


CC BY-SA 4.0
2020-04-05T04:02:05.983
65359
2020-04-05T04:02:05.983
241
65341
answer