【发布时间】: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 始终是一个有意的决定。
-
您是否尝试过在新标签页中打开所有按钮。并根据需要切换标签。
标签: python selenium selenium-webdriver