使用Selenium WebDriver Python如何在不刷新页面的情况下重新加载HTML?

5

我有一个带有自动刷新内容(通过WebSocket)的页面,类似于这个。虽然内容不断变化,但我的Firefox webdriver只能看到最初的内容。我可以通过刷新页面来获取最新内容。

   driver.navigate.refresh()

但这会导致不必要的流量,而且在Firefox窗口中新内容已经出现了。
我的问题是:我能否获取新鲜的HTML,就像我在Firefox窗口中观察到的那样,而无需重新加载整个页面?

我不认为你可以用Selenium做这样的事情。看看这个替代方案。http://jmeter.apache.org - Juggernaut
@AminEtesamian 谢谢,看起来不错,但我需要使用Python。 - user92020
1个回答

4
如果页面内容在一段时间内发生变化,您可以选择每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)

1
好的,这正是我想做的。问题在于,当我调用driver.page_source或检查某个元素时,内容不会改变。也就是说,驱动程序保存了初始HTML一次,然后不再更新。因此,关键点是如何获取更新后的源代码? - user92020
你可能正在重复使用存储页面源代码的变量,这就是为什么它显示相同值的原因。在等待后重新分配page_source到同一变量中,或者只需再次调用browser.page_source以获取页面的更新源。我已编辑我的答案以展示一个可行的例子。 - B B
太好了,我已经添加了“marionette”选项,现在它的功能完全符合预期!非常感谢! - user92020

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接