求助:Playwright控制浏览器标签页并发数,关闭标签后无法自动开新标签
解决Playwright批量打开页面时的标签页数量限制问题
问题核心在于Playwright与Selenium对页面/窗口的统计逻辑存在差异:
- Selenium的
window_handles仅返回当前活跃的窗口,关闭窗口后会自动从列表中移除 - Playwright的
context.pages()返回所有创建过的页面,包括已经关闭但未被回收的页面,直接取长度会导致统计错误
修正后的代码需要过滤掉已关闭的页面,只统计活跃页面数量:
for row in df.itertuples(): # 实时统计当前活跃的页面数量 while len([page for page in chrome.browser.contexts[0].pages if not page.is_closed()]) > abas: time.sleep(0.5) # 打开新页面并处理文件 page = chrome.browser.contexts[0].new_page() # 此处添加你的文件处理逻辑 # ...
如果需要更高效的判断(避免每次循环都生成列表),也可以拆分逻辑:
for row in df.itertuples(): def get_active_page_count(): return sum(1 for page in chrome.browser.contexts[0].pages if not page.is_closed()) while get_active_page_count() > abas: time.sleep(0.5) # 后续页面操作 page = chrome.browser.contexts[0].new_page() # ...
这样就能保证关闭标签页后,活跃页面数量降到限制值以下时,自动打开新的标签页,和Selenium中的逻辑保持一致。
内容的提问来源于stack exchange,提问作者Avestruz
相关产品推荐
相关产品推荐

