【问题标题】:Selenium WebDriver Python reload html without refreshing the pageSelenium WebDriver Python重新加载html而不刷新页面
【发布时间】:2017-02-16 06:02:10
【问题描述】:

我有一个像 one 这样的带有自刷新内容的页面(通过 WebSocket)。虽然内容不断变化,我的firefox webdriver只能看到初始内容。我可以通过

刷新页面来获得新鲜的
   driver.navigate.refresh()

但这会导致不必要的流量,除了新内容已经出现在 Firefox 窗口中。

我的问题是:我能否在不重新加载整个页面的情况下获得在 Firefox 窗口中观察到的新鲜 html?

【问题讨论】:

  • 我不认为你可以用 Selenium 做这样的事情。检查这个替代方案。 jmeter.apache.org
  • @AminEtesamian 谢谢,看起来不错,但我需要使用 python。

标签: javascript python selenium page-refresh


【解决方案1】:

如果页面内容在一段时间内发生变化,您可以做的一个选择是每 n 秒检查一次页面源。一个简单的方法是 import time 然后使用 time.sleep(5) 等待 5 秒,然后获取页面源。你也可以把它放在一个循环中,如果页面内容在接下来的 5 秒内发生了变化,那么 selenium 应该能够在你检查时获取更新的页面内容。我尚未对此进行测试,但请随意检查它是否适合您。

编辑:添加示例代码。 确保您已正确安装和配置木偶。如果您是 ubuntu 用户,可以在这里查看我的答案 (https://stackoverflow.com/a/39536091/6284629)

# this code would print the source of a page every second
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time

# side note, how to get marionette working for firefox:
# https://stackoverflow.com/a/39536091/6284629

capabilities = DesiredCapabilities.FIREFOX
capabilities["marionette"] = True
browser = webdriver.Firefox(capabilities=capabilities)

# load the page
browser.get("http://url-to-the-site.xyz")

while True:
    # print the page source
    print(browser.page_source)
    # wait for one second before looping to print the source again
    time.sleep(1)

【讨论】:

  • 好吧,这正是我想要做的。问题是,当我调用 driver.page_source 或检查某个元素时,内容不会改变。 IE。驱动程序将初始 html 保存一次并且不会更新。那么重点是如何获取更新的源码呢?
  • 您可能正在重用存储 page_source 的变量,这就是它显示相同值的原因。等待后将 page_source 重新分配给相同的变量,或者再次调用 browser.page_source 以获取页面的更新源。我已经编辑了我的答案以显示一个工作示例。
  • 太好了,我添加了“木偶”选项,现在它可以正常工作了!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 2020-12-13
  • 2011-04-08
  • 2012-03-06
  • 1970-01-01
  • 2019-03-10
  • 2021-12-23
相关资源
最近更新 更多