【问题标题】:python - Save HTML from browserpython - 从浏览器中保存 HTML
【发布时间】:2018-03-15 02:37:33
【问题描述】:

我在浏览器中打开了自己的本地 HTML 文件。当我单击某个按钮时,该按钮的类更改为“已选择”。我想要做的是让 Python 在浏览器中获取文件的当前更新的 HTML,并将其覆盖为原始 HTML 文件。这里的目标是将浏览器更新的更改保存为新的 HTML 文件,这样下次我打开此文件时,无需再次进行更改。

通常我会:

  1. 向 url 发送 HTTP 请求
  2. 将响应转换为 BeautifulSoup 对象
  3. 然后将其保存为myfile.html的字符串

    url = 'http://google.com'
    r = requests.get(url)
    soup = str(BeautifulSoup(r.content,'lxml'))
    file.write(soup)
    

但我无法发送 HTTP 请求,因为它是当前在我的浏览器中打开的文件,而不是服务器上要请求的网页。所以我不确定如何将结构化的 HTML 接收到 Python 中以进行进一步处理。

【问题讨论】:

  • 听起来像XY Problem。如果您在手动单击浏览器中的按钮来更新 HTML 时遇到麻烦,为什么不在文本编辑器中手动更新 HTML?

标签: python html file-io beautifulsoup python-requests


【解决方案1】:

您可以尝试使用selenium 包。您需要在您运行它的同一文件夹中拥有您选择的浏览器的 webdriver.exe(下面的代码使用 Chrome Web 驱动程序)。为简洁起见,此示例要求您从控制台将其作为实时脚本运行。

from selenium import webdriver

browser = webdriver.Chrome()

这将启动网络驱动程序。它看起来就像一个普通的浏览器。

browser.get('YOUR URL HERE')

对网站进行一些更改,完成后:

html = browser.page_source

这会将修改后的 html 作为字符串返回到 html,您可以使用它来覆盖原始 html 文件。

【讨论】:

    【解决方案2】:

    您可以使用内置库http.server 来提供页面。

    在一个控制台中,切换到您的工作目录:

    J:\>echo hello > hello.html
    
    J:\>python -m http.server 8000
    Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
    

    在另一个方面:

    >>> import requests
    >>> resp = requests.get("http://127.0.0.1:8000/hello.html")
    >>> resp.text
    'hello \r\n'
    >>> resp.status_code
    200
    

    您会在服务器窗口中看到日志条目,例如

    127.0.0.1 - - [15/Mar/2018 13:45:40] "GET /hello.html HTTP/1.1" 200 -
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-01
      • 2010-10-24
      • 1970-01-01
      • 2013-10-04
      • 2017-09-18
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多