【问题标题】:How to validate the changes in a webpage after reloading the webpage through selenium (python)?通过硒(python)重新加载网页后如何验证网页中的更改?
【发布时间】:2018-09-25 13:06:33
【问题描述】:

我需要不断地尽快重新加载网页并检查是否有任何变化。但是当我尝试以下方法时,它不起作用。

我用过这样的东西:

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

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

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

【问题讨论】:

  • 您打电话给driver.get(driver.getCurrentUrl()) 而不仅仅是driver.refresh() 有什么特别的原因吗?我现在无法检查,但我怀疑它可以解决问题......
  • 另外,我想知道你想通过比较页面源来归档什么?是检查整个页面是否有变化,还是检测最终用户可能看不到的微小变化?另请注意,不同的浏览器实现 page_source 的方式不同:一些返回 DOM 的当前状态,而另一些则完全按照加载时从服务器接收到的源返回。

标签: python selenium selenium-webdriver webdriver reload


【解决方案1】:

虽然您在拉出page_source检查更改之前再次在getCurrentUrl() 上调用get() 方法,但值得一提的是,虽然WebClient 可能在某个阶段实现了 'document.readyState' 等于 "complete" 并且 Selenium 取回了没有的控制权' t 保证新页面上所有相关的 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 -- 

【讨论】:

    猜你喜欢
    • 2021-09-21
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 2014-04-08
    • 2015-03-27
    • 2020-05-13
    相关资源
    最近更新 更多