如何在通过selenium(python)重新加载网页后验证网页中的更改?
我需要不断地尽可能快地重新加载网页,并检查是否有什么变化。但当我尝试以下方法时,它不起作用 我用了这样的方法:如何在通过selenium(python)重新加载网页后验证网页中的更改?,python,selenium,selenium-webdriver,webdriver,reload,Python,Selenium,Selenium Webdriver,Webdriver,Reload,我需要不断地尽可能快地重新加载网页,并检查是否有什么变化。但当我尝试以下方法时,它不起作用 我用了这样的方法: while True: driver.get(driver.getCurrentUrl()) source = driver.page_source -- checking for change -- 在使用Edge webdriver时(它是最快的一个),但是当更改已经发生时,webdriver仍然获取页面的旧版本 我不知道驱动程序是否可以将页面保存在缓
while True:
driver.get(driver.getCurrentUrl())
source = driver.page_source
-- checking for change --
在使用Edge webdriver时(它是最快的一个),但是当更改已经发生时,webdriver仍然获取页面的旧版本
我不知道驱动程序是否可以将页面保存在缓存中,但我需要确保,我将始终获得当前版本。如何实现这一点?当您在拉出页面\u source
检查更改之前再次调用getCurrentUrl()
上的get()
方法时,值得一提的是,尽管WebClient可能实现了'document.readyState'等于'complete'在某个阶段,Selenium获得了控制权,该控制权不能保证新页面上所有相关的Javascript和Ajax调用都已完成。除非与DOM树相关联的Javascript和Ajax调用完成,否则页面可能无法完全呈现,您可能无法跟踪预期的更改
检查变更的理想方法是结合以下条款集进行归纳:
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 --
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 --
注意:虽然页面标题位于的
标记内,但更好的解决方案是使元素的可见性提高,该元素将出现在的
标记内的所有情况下,如下所示:
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 --
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 --
您调用
driver.get(driver.getCurrentUrl())
而不是简单地调用driver.refresh()
,有什么特殊原因吗?。我现在不能检查它,但我怀疑它可以解决这个问题…另外,我想知道通过比较页面源代码,您想要归档什么?是检查整个页面是否有更改,还是检测最终用户甚至看不到的小更改?还要注意,不同的浏览器实现页面源的方式不同:一些浏览器返回DOM的当前状态,而另一些浏览器返回的源与加载时从服务器接收的源完全相同。