【问题标题】:How to run scripts from a HTML file using Python?如何使用 Python 从 HTML 文件运行脚本?
【发布时间】:2021-03-11 16:23:37
【问题描述】:

我正在用 Python 构建一个爬虫,并想调用 HTML 代码中的脚本,就像 Web 浏览器在进入网站时所做的那样。是否可以在 HTML 代码上从 Python 级别运行脚本?

目的是在网络浏览器中获取与“DOM Inspector”相同的 HTML 代码,而不是您可以简单下载的代码

requests.get("https://example.com")

或者当您使用“查看源代码”模式时...

假设我得到了代码:

<!DOCTYPE html>
<html>
  <body>
    <h1>The script element</h1>
    <p id="demo"></p>

    <script>
      document.getElementById("demo").innerHTML = "Hello JavaScript!";
    </script>
  </body>
</html>

如果我运行脚本,它将改变

元素的内容,结果将是

<!DOCTYPE html>
<html>
  <body>
    <h1>The script element</h1>
    <p id="demo">Hello JavaScript!</p>
  </body>
</html>

那么如何运行它并使用页面中的所有脚本评估 HTML 代码?

编辑 1:我知道“Selenium”库,但我试图在不使用浏览器模拟器的情况下解决我的问题,只使用 Python 和 JavaScript...

提前致谢!

【问题讨论】:

    标签: javascript python html


    【解决方案1】:

    你应该使用Brython,然后只有你可以结合 HTML 和 Python 语言,否则你必须学习框架,如 Django如果对你有帮助请告诉我。

    【讨论】:

      【解决方案2】:

      您可以使用库“selenium”来加载页面,还包含用于单击网站/您可以与之交互的元素。然后刮掉它,你可能想使用库“beautifulsoup4”。您需要在 cmd 中使用

      pip install selenium
      

      pip install beautifulsoup4
      

      【讨论】:

      • Selenium 太慢,因为它会启动浏览器...我正在寻找仅使用 Python 和 JavaScript 的解决方案
      【解决方案3】:

      也许你可以得到响应并将其写入 html 文件

      【讨论】:

      • 是的,但这正是我的问题......我得到一个 HTML 文件(或只是字符串),现在我想像浏览器一样运行它的脚本......但我不知道如何仅限 Python 级别
      【解决方案4】:

      您正在寻找一个名为Selenium的跨平台测试框架

      您可以在 Firefox 或 Chrome 等浏览器中使用网络驱动程序启动页面,并像编写脚本一样与页面交互。

      Docs

      【讨论】:

      • 谢谢,但是... Selenium 对我来说很慢。正如您所说的“它在浏览器中启动页面”,但我试图仅使用 Python 和 JavaScript 运行脚本,而不使用其他应用程序。性能对我来说很重要,浏览器会显着减慢一切......
      • 我已经得到了一个 HTML 文件(作为一个字符串),现在我想像浏览器一样执行它的所有脚本,但我不知道如何......
      【解决方案5】:

      remove tags/stype-tags from html with lxml 部分回答了这个问题

      目前还不清楚您到底需要什么。从示例中,您只是希望删除

      来自The purpose is to get the same HTML code as in 'DOM Inspector' in web browser,您似乎想使用python解析HTML,即。解析、显示和显示所有元素的详细信息。

      我个人更喜欢低级,lxml for html 似乎可以解决问题...

      示例代码:

      from lxml import etree
      from lxml import html
      from lxml.html.clean import Cleaner
      
      h = '''<!DOCTYPE html>
      <html>
        <body>
          <h1>The script element</h1>
          <p id="demo"></p>
      
          <script>
            document.getElementById("demo").innerHTML = "Hello JavaScript!";
          </script>
        </body>
      </html>'''
      
      # Using etree 
      root = etree.fromstring(h)
      print(etree.tostring(root).decode())
      
      # Code came from previous reference link above: https://stackoverflow.com/questions/8554035/remove-all-javascript-tags-and-style-tags-from-html-with-python-and-the-lxml-mod
      cleaner = Cleaner()
      cleaner.javascript = True # This is True because we want to activate the javascript filter
      cleaner.style = True      # This is True because we want to activate the styles & stylesheet filter
      
      # using html parser
      print("\nWITH JAVASCRIPT & STYLES")
      print(html.tostring(html.fromstring(h)).decode())
      print("\nWITHOUT JAVASCRIPT & STYLES")
      print(html.tostring(cleaner.clean_html(html.fromstring(h))).decode())
      

      输出:

      <html>
        <body>
          <h1>The script element</h1>
          <p id="demo"/>
      
          <script>
            document.getElementById("demo").innerHTML = "Hello JavaScript!";
          </script>
        </body>
      </html>
      
      WITH JAVASCRIPT & STYLES
      <html>
        <body>
          <h1>The script element</h1>
          <p id="demo"></p>
      
          <script>
            document.getElementById("demo").innerHTML = "Hello JavaScript!";
          </script>
        </body>
      </html>
      
      WITHOUT JAVASCRIPT & STYLES
      <div>
        <body>
          <h1>The script element</h1>
          <p id="demo"></p>
      
      
        </body>
      </div>
      ​
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-19
        • 2020-09-14
        • 1970-01-01
        • 2021-10-20
        • 1970-01-01
        • 2021-04-11
        相关资源
        最近更新 更多