嗯,你这个问题抓得非常到位!如果把 `driver.quit()` 放在每次截图的代码中间,确实会出现你提到的问题。我们可以通过调整代码结构来实现截完所有截图后再关闭浏览器。一般来说,可以把 `driver.quit()` 放在一个更大的流程控制块里,这样确保所有截图操作都已完成。
### 代码结构调整
下面是改进后的示例代码:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import time
import os
from datetime import datetime
def capture_screenshot(url, folder_path, screenshot_name):
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
try:
# 打开直播间
driver.get(url)
time.sleep(5) # 等待直播间加载
# 截图并保存
screenshot_path = os.path.join(folder_path, screenshot_name)
driver.save_screenshot(screenshot_path)
finally:
# 关闭WebDriver
driver.quit()
if __name__ == "__main__":
# 直播间URL列表
live_urls = [
"https://www.douyin.com/live/xxxx",
"https://www.douyin.com/live/yyyy",
# 可以继续添加更多直播间URL
]
# 获取当天日期并创建目录
today_date = datetime.now().strftime("%Y-%m-%d")
folder_path = os.path.join(os.getcwd(), today_date)
if not os.path.exists(folder_path):
os.makedirs(folder_path)
# 遍历每个直播间URL并截图
for index, url in enumerate(live_urls):
screenshot_name = f"screenshot_{index + 1}.png"
capture_screenshot(url, folder_path, screenshot_name)
### 代码解释
1. **capture_screenshot 函数**:该函数用于打开一个特定的直播间URL,然后进行截图并保存文件。
2. **主程序中**:
- **直播间URL列表**:包含需要截图的多个直播间URL。
- **创建保存截图的文件夹**:获取当天日期并创建对应的文件夹,如果文件夹不存在则创建。
- **遍历每个URL进行截图**:使用 `for` 循环遍历每个直播间URL,调用 `capture_screenshot` 函数进行截图。
这样一来,每次截图都是在一个新的WebDriver实例中进行的,确保完整性,并且在截完所有截图后,才会进行清理和关闭。希望这个解决方案能够满足你的需求!如果有其他问题,尽管提问哦!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |