保存 Selenium 的当前状态

Posted

技术标签:

【中文标题】保存 Selenium 的当前状态【英文标题】:Save current state of Selenium 【发布时间】:2015-10-24 22:40:14 【问题描述】:

是否可以保存 Selenium 浏览器的当前状态?

为了理解我将提供一个例子:

假设有一个网页。我点击了我发现许多其他按钮的按钮。我想依次检查每个按钮。问题是每个按钮都需要获取浏览器信息,例如 referrer 应该是第一次点击后的第一页等。

在这种情况下,我需要将这些信息保存在浏览器中,因为如果我点击第二个按钮,referrer 将是最近打开的页面。在那之后我不能点击第三个。我必须返回,但某些网页不允许浏览器“返回”。另一个优点是我不必向服务器发送新请求。

类似这样的:

for but in driver.find_elements_by_class_name('button'):
    state = driver.save_state()
    but.click()
    # do stuff
    driver.load_state()

【问题讨论】:

当您点击列表中的按钮时,URL 是否总是改变?另外,引荐来源网址是唯一引起问题的原因吗? 我认为该页面非常困难。它甚至不允许浏览器上的后退按钮(它无法正常工作,您可以使用“后退”,但您不会获得之前的页面)。是的,它会发生变化,但 URL 根本不足以到达您想要的地方。它是某种动态生成的东西。 一个疯狂的想法:尝试复制浏览器对象。在循环中执行tmp = copy.deepcopy(driver) 然后but.click() 然后driver = tmp 刚刚google了一下,感觉referrer是http请求中存储的header。如果这是真的,那么这就超出了 selenium 的能力范围。您可以做的是将代理连接到您的驱动程序实例,这将允许您检查浏览器活动中感兴趣的标头,并拦截对浏览器的请求,以便您可以修改请求标头。除非最近版本的 selenium 做出了这种改变,否则开发人员不允许 webdriver 获取原始 http 始终是一个有意的决定。 您是否尝试过在新标签页中打开所有按钮。并根据需要切换标签。 【参考方案1】:

还有另一种解决方案。 Web 浏览器通常使用缓存来保存它的状态。因此,您可以在单击每个按钮之前保存缓存,然后重新使用缓存返回到单击之前的状态。 我已经在我的项目中使用了该解决方案。如果没有任何内容保存到数据库或其他第三方中,它将完美运行。

【讨论】:

以上是关于保存 Selenium 的当前状态的主要内容,如果未能解决你的问题,请参考以下文章

selenium获取测试对象的内容和状态

如何强制Selenium WebDriver点击当前不可见的元素?

Python+selenium之窗口截图

Python之Selenium自动化爬虫

如何启动selenium ide

在 Selenium IDE 中,如何获取基本 url 的值