如何在不关闭 Selenium Web 浏览器的情况下中断 jupyter 内核?

问题描述 投票:0回答:1

我制作了一个硒脚本,可以循环地从页面获取数据。

不幸的是,有时该循环会卡住:也就是说,循环会迭代而没有获取我需要的数据,例如因为网页提供一种新类型的数据,或者因为数据的格式不是我期望的格式。

因此,我需要中断包含循环的单元格,即停止循环,但不关闭 Selenium Web 浏览器,以便我可以修复循环并重新启动它。

但问题是,如果我按“中断内核”,Selenium Web 浏览器会自动关闭。

如何防止 Selenium Web 浏览器在按下“中断内核”时关闭?

相关问题.

python selenium-webdriver jupyter-notebook interrupt
1个回答
0
投票

当您中断内核时,可能会导致 WebDriver 实例终止,从而关闭浏览器窗口。您可以尝试以下一些保持浏览器打开的策略:

  1. 全局 WebDriver:您可以创建一个全局 WebDriver 实例,而不是在循环或单元格中创建 WebDriver 实例。这样,即使循环终止,WebDriver 也不在终止范围内,并且可能不会关闭。
# Start the driver globally
driver = webdriver.Chrome()

def fetch_data():
    # Your loop and fetching logic here.
  1. 异常处理:在循环中引入异常处理。如果发生意外事件(例如数据格式更改),请捕获异常,甚至可能引入睡眠。这将使您有时间在不关闭浏览器的情况下纠正问题。
from time import sleep

while True:
    try:
        # Your fetching logic
    except Exception as e:
        print(f"Error: {e}")
        sleep(60)  # Sleep for a minute
  1. Webdriver 选项:启动 Selenium Web 浏览器时使用
    detach
    选项。这会将浏览器会话与 WebDriver 实例分离。请注意,一旦分离,您可能会失去对此浏览器实例的控制。
from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(options=chrome_options)
  1. 手动控制:如果您预计数据格式会出现错误或更改,也许可以考虑引入一种机制,您可以在不中断内核的情况下手动干预。例如,每隔几次迭代后,您可以检查磁盘上是否存在某个文件,如果找到,则暂停循环,从而允许您修改数据获取逻辑。
import os
from time import sleep

while True:
    # Your fetching logic here
    if os.path.exists("pause.txt"):
        print("Pause file detected. Pausing operation...")
        while os.path.exists("pause.txt"):
            sleep(10)

当您想暂停循环时,只需创建一个“pause.txt”文件即可。完成修改后,删除“pause.txt”文件,循环将继续。

这些策略应该有助于保持浏览器窗口打开,并让您有机会根据需要干预和修改循环。

© www.soinside.com 2019 - 2024. All rights reserved.