【问题标题】:Is there a way to "refresh" a request?有没有办法“刷新”请求?
【发布时间】:2019-11-28 05:32:05
【问题描述】:

我正在尝试使用 python requests 模块和 beautifulsoup4 从网站下载文件,但问题是您必须等待 5 秒钟才能出现下载按钮。

我尝试使用 requests.get('URL') 获取页面,然后使用 beautifulsoup4 解析它以获取下载链接,但问题是您必须等待 5 秒(如果您要使用实际浏览器打开它)为了让按钮出现,所以当我将 URL 传递给 requests.get() 时,初始响应对象没有按钮元素,我在谷歌上搜索了很多,但找不到任何对我有帮助的结果。

有没有办法“刷新”响应对象?还是“等待”?也就是在五秒钟后更新它的内容,就好像它是用浏览器打开的一样?

我认为请求模块不可能做到这一点。我该怎么办?

我正在运行 Windows10 64x

我是新手,如果格式不好,我很抱歉。 :(

【问题讨论】:

  • 您必须弄清楚使下载按钮出现的机制是什么。客户端可能只有 JavaScript,在这种情况下,页面源代码中可能会提供实际的下载 URL。
  • 我很确定它确实存在于源代码中,但我无法使用诸如 beautifulsoup4 之类的 html 解析器对其进行解析,我将按照人们的建议尝试 selenium(当我查看 html 代码时页面打开,按钮元素在 5 秒后突然出现,所以它可能是 javascript)

标签: python html python-requests


【解决方案1】:

HTTP 是无状态的,每个新请求都与之前的请求不同。我们通常在 cookie、浏览器存储等中实现状态。作为一个普通的 HTTP 客户端,requests 无法刷新一个请求,下一个请求将是一个全新的请求。

您正在寻找的是一些理解 JavaScript 并且可以自动处理页面更新的客户端。我建议你看看selenium 可以做浏览器自动化。

【讨论】:

    【解决方案2】:

    试试这样的,

    driver.get("http://somedomain/url_that_delays_loading")
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "myDynamicElement"))
        )
    finally:
       driver.quit()
    

    【讨论】:

      猜你喜欢
      • 2018-05-26
      • 2016-11-13
      • 1970-01-01
      • 2022-01-16
      • 2016-01-11
      • 2010-10-25
      • 2015-11-16
      • 1970-01-01
      • 2018-07-31
      相关资源
      最近更新 更多