Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 保存硒的当前状态_Python_Selenium_Selenium Webdriver - Fatal编程技术网

Python 保存硒的当前状态

Python 保存硒的当前状态,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,是否可以保存Selenium浏览器的当前状态 为了理解,我将提供一个示例: 假设有一个网页。我点击了按钮,在那里我发现了许多其他按钮。我想按顺序检查每个按钮。问题是,每个按钮都需要获取浏览器信息,如referer,这应该是第一次单击后的第一页等 在这种情况下,我需要将这些信息保存在浏览器中,因为如果我单击第二个按钮,referer将是最近打开的页面。在那之后我不能点击第三个。我必须返回,但有些网页不允许浏览器返回。另一个优点是,我不必向服务器发送新的请求 大概是这样的: for but in d

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

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

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

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

大概是这样的:

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

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

当您点击列表中的按钮时,URL是否总是更改?另外,推荐人是唯一会引起问题的东西吗?我认为这个页面很难处理。它甚至不允许在浏览器上使用“后退”按钮(它不能正常工作,您可以使用“后退”按钮,但您无法在之前的步骤中获取页面)。是的,它会改变,但URL根本不足以到达您想要的地方。这是一种动态生成的东西。一个疯狂的想法:尝试复制浏览器对象。在循环中do
tmp=copy.deepcopy(driver)
然后
but.click()
然后
driver=tmp
刚刚做了一个谷歌搜索,听起来引用者是http请求中存储的头。如果这是真的,那么这就超出了硒的能力范围。不过,您可以做的是将代理连接到驱动程序实例,这将允许您检查浏览器活动中感兴趣的标题,并截获对浏览器的请求,以便您可以修改请求标题。除非selenium的最新版本做出了此更改,否则开发人员一直有意不允许webdriver访问原始http。您是否尝试过打开新选项卡中的所有按钮。并根据需要切换选项卡。