如何在通过selenium(python)重新加载网页后验证网页中的更改?

2024-10-04 01:28:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要不断地重新加载网页尽快检查,如果有什么改变。但当我尝试下面的方法时,它不起作用

我用了这样的方法:

while True:
    driver.get(driver.getCurrentUrl()) 
    source = driver.page_source
    -- checking for change -- 

当使用Edge webdriver(它是最快的一个)时,但是当更改已经发生时,webdriver仍然获得页面的旧版本

我不知道驱动程序是否可以将页面保存在缓存中,但我需要确保,我将始终获得当前版本。我怎样才能做到这一点


Tags: 方法true网页sourceforgetdriverpage
1条回答
网友
1楼 · 发布于 2024-10-04 01:28:01

在拉出page_source以检查更改之前,再次在getCurrentUrl()上调用get()方法时,值得一提的是,尽管WebClient可能在某个阶段实现了'document.readyState'等于“complete”,并且Selenium获得了一个控件,该控件不能保证新页面上所有相关的JavascriptAjax调用都已完成。除非与DOM树关联的JavascriptAjax调用完成,否则页面不会完全呈现,您可能无法跟踪预期的更改

检查变化的理想方法是将WebDriverWaitexpected_conditions子句结合起来设置为title_contains,如下所示:

while True:
    driver.get(driver.getCurrentUrl())
    WebDriverWait(browser, 10).until(EC.title_contains(("full_or_partial_text_of_the_page_title")))
    source = driver.page_source
      check for change   

注意:虽然页面标题位于HTML DOM<head>标记中,但更好的解决方案是为WebDriverWait引入一个元素的可见性,该元素将出现在DOM Tree<body>标记中的所有情况中,如下所示:

while True:
    driver.get(driver.getCurrentUrl())
    WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.ID, "id_of_element_present_in_all_situation")))
    source = driver.page_source
      check for change   

相关问题 更多 >