如何在Python中阻止Selenium在终端打印日志?
解决Selenium Edge驱动终端打印错误日志的问题
你之前修改--log-level没效果,是因为EdgeDriver的日志输出不全由浏览器选项控制,得结合驱动服务配置和Python日志调整来解决。下面是具体的解决办法:
方法1:配置EdgeOptions将日志导向文件
给EdgeOptions添加日志级别和日志文件参数,把日志写到文件里,终端就不会输出了。另外注意原代码里创建驱动时没传入配置好的options,这也是之前设置无效的关键原因:
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from msedge.selenium_tools import EdgeOptions import requests options = EdgeOptions() options.add_argument("headless") options.add_argument("disable-gpu") # 设置日志级别为ERROR(3),并指定日志文件路径 options.add_argument("--log-level=3") options.add_argument("--log-path=edge_driver.log") # 务必把配置好的options传给driver driver = webdriver.Edge("msedgedriver.exe", options=options) driver.get("https://example.com/") class App(): def __init__(self, username="username_here", password="password_here"): self.username = username self.password = password @staticmethod # 原方法无self参数,需添加静态方法装饰器避免报错 def logIn(): app = App() userField = driver.find_element(By.XPATH, "//input[@id='Username']") userField.send_keys(app.username) passField = driver.find_element(By.XPATH, "//input[@id='Password']") passField.send_keys(app.password) logInBtn = driver.find_element(By.XPATH, "//button[normalize-space()='Connexion']") logInBtn.click() @staticmethod def getEvents(): eventTitles = driver.find_element(By.XPATH, "//div[@class='fc-content-skeleton']").text.splitlines() eventDataIDSElement = driver.find_elements(By.TAG_NAME, "a") eventDataIDS = [eventDataIDElement.get_attribute("data-id") for eventDataIDElement in eventDataIDSElement if eventDataIDElement.get_attribute("data-id") != None] if __name__ == "__main__": App.logIn() App.getEvents() print("tasks done.") driver.quit() # 任务完成后记得关闭驱动
方法2:用Service类控制驱动日志(Selenium 4+适用)
如果你的Selenium版本是4及以上,可以用EdgeService直接禁用驱动日志输出:
from selenium import webdriver from selenium.webdriver.edge.service import Service as EdgeService from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from msedge.selenium_tools import EdgeOptions import requests options = EdgeOptions() options.add_argument("headless") options.add_argument("disable-gpu") # Windows用NUL,Linux/macOS用/dev/null,将日志导向空设备 service = EdgeService(executable_path="msedgedriver.exe", log_path='NUL') driver = webdriver.Edge(service=service, options=options) driver.get("https://example.com/") # 后续类和方法同上...
方法3:调整Python全局日志级别
如果还有Python层面的selenium日志输出,可以直接把相关日志级别调高,只保留警告及以上信息:
import logging # 把selenium相关模块的日志级别设为WARNING logging.getLogger('selenium').setLevel(logging.WARNING) logging.getLogger('msedge.selenium_tools').setLevel(logging.WARNING)
把这段代码放在文件最开头即可。
内容的提问来源于stack exchange,提问作者mrKhalilAnas
相关产品推荐
相关产品推荐

