如何避免 selenium 驱动程序自动关闭?
How to avoid selenium driver closing automatically?
在我的问题之前,向您展示我的代码的一般结构可能会有所帮助:
class ItsyBitsy(object):
def __init__(self):
self.targets_a = dict() # data like url:document_summary
# filled by another function
def visit_targets_a(self):
browser = webdriver.Safari()
for url in self.targets_a.keys():
try:
browser.switch_to.new_window('tab')
browser.get(url)
time.sleep(2)
except Exception as e:
print(f'{url} FAILED: {e}')
continue
# do some automation stuff
time.sleep(2)
print('All done!')
然后我可以实例化 class 并毫无问题地调用我的方法:
spider = ItsyBitsy()
spider.visit_targets_a()
>>> All done!
然而,在打开每个选项卡并完成自动化后,window 会在没有任何提示的情况下关闭,即使我的代码中没有任何 browser.close()
或 browser.exit()
。
我的创可贴修复方法是在最后一个循环中调用 time.sleep(9999999999999999)
,由于 Overflow Error
,这使 window 无限期打开,但这显然不是解决方案。
那么,如何阻止浏览器退出?!
如果你能告诉我为什么会这样,加分。
谢谢guys/gals!
你在使用 VS 代码吗?半年前我遇到了同样的问题,切换到 Sublime text 解决了这个问题。这个问题之所以出现,是因为 VS Code 对 运行 python 代码有一种奇怪的方式(通过扩展)——当最后一行代码被执行时,它会杀死脚本创建的所有进程。
您需要覆盖 exit 并防止 'browser.quit()' 自动发生。
如果您设置 teardown=False,这会使浏览器保持打开状态:
class ItsyBitsy(object):
def __init__(self, teardown=False):
self.teardown = teardown
self.targets_a = dict() # data like url:document_summary
# filled by another function
self.browser = webdriver.Safari()
def visit_targets_a(self):
for url in self.targets_a.keys():
try:
self.browser.switch_to.new_window('tab')
self.browser.get(url)
time.sleep(2)
except Exception as e:
print(f'{url} FAILED: {e}')
continue
# do some automation stuff
time.sleep(2)
print('All done!')
def __exit__(self, exc_type, exc_val, exc_tb):
if self.teardown:
self.browser.quit()
spider = ItsyBitsy(teardown=False)
spider.visit_targets_a()
在我的问题之前,向您展示我的代码的一般结构可能会有所帮助:
class ItsyBitsy(object):
def __init__(self):
self.targets_a = dict() # data like url:document_summary
# filled by another function
def visit_targets_a(self):
browser = webdriver.Safari()
for url in self.targets_a.keys():
try:
browser.switch_to.new_window('tab')
browser.get(url)
time.sleep(2)
except Exception as e:
print(f'{url} FAILED: {e}')
continue
# do some automation stuff
time.sleep(2)
print('All done!')
然后我可以实例化 class 并毫无问题地调用我的方法:
spider = ItsyBitsy()
spider.visit_targets_a()
>>> All done!
然而,在打开每个选项卡并完成自动化后,window 会在没有任何提示的情况下关闭,即使我的代码中没有任何 browser.close()
或 browser.exit()
。
我的创可贴修复方法是在最后一个循环中调用 time.sleep(9999999999999999)
,由于 Overflow Error
,这使 window 无限期打开,但这显然不是解决方案。
那么,如何阻止浏览器退出?!
如果你能告诉我为什么会这样,加分。
谢谢guys/gals!
你在使用 VS 代码吗?半年前我遇到了同样的问题,切换到 Sublime text 解决了这个问题。这个问题之所以出现,是因为 VS Code 对 运行 python 代码有一种奇怪的方式(通过扩展)——当最后一行代码被执行时,它会杀死脚本创建的所有进程。
您需要覆盖 exit 并防止 'browser.quit()' 自动发生。
如果您设置 teardown=False,这会使浏览器保持打开状态:
class ItsyBitsy(object):
def __init__(self, teardown=False):
self.teardown = teardown
self.targets_a = dict() # data like url:document_summary
# filled by another function
self.browser = webdriver.Safari()
def visit_targets_a(self):
for url in self.targets_a.keys():
try:
self.browser.switch_to.new_window('tab')
self.browser.get(url)
time.sleep(2)
except Exception as e:
print(f'{url} FAILED: {e}')
continue
# do some automation stuff
time.sleep(2)
print('All done!')
def __exit__(self, exc_type, exc_val, exc_tb):
if self.teardown:
self.browser.quit()
spider = ItsyBitsy(teardown=False)
spider.visit_targets_a()