get_screenshot_as_file()方法在存在alert弹窗时报错问题

用python做selenium自动化时,截图出现了错误,奇怪的是正确的用户和密码截图没问题,错误的用户名和密码登录失败出现alert弹窗时截图就报错,真的奇怪,记录一下

from ddt import ddt, data, unpack
from base.browser_engine import BrowserEngine
import unittest
from common.excel_util import ExcelUtil
from pageobjects.baiyueSMS_homepage import BaiYueSMSPage
from base.logger import Logger

logger = Logger(logger='test_login').get_log()


@ddt
class TestLogin(unittest.TestCase):
    driver = None

    def setUp(self):
        self.driver = BrowserEngine().open_browser()

    def tearDown(self):
        self.driver.quit()

    @data(*ExcelUtil().read_excel())
    @unpack
    def test_login_case001(self, index, username, passwd):
        baiyuesms_homepage = BaiYueSMSPage(self.driver)
        baiyuesms_homepage.login_sms(username, passwd)
        baiyuesms_homepage.get_windows_img()
        if index == 1:
            self.assertEqual(baiyuesms_homepage.get_expect_result(), '管理员')
        elif index == 2:
            self.assertEqual(baiyuesms_homepage.get_text(), '登录失败 : 用户名或者密码错误')
        elif index == 3:
            self.assertEqual(baiyuesms_homepage.get_text(), '登录失败 : 用户名或者密码错误')


if __name__ == '__main__':
    unittest.main()

    def get_windows_img(self):
        file_path = PathUtil().get_path() + '\\screenshots\\'
        rq = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
        screen_name = file_path + rq + '.png'
        try:
            self.driver.get_screenshot_as_file(screen_name)
            logger.info('开始截图并保存')
        except Exception as e:
            logger.error('截图异常', format(e))

在这里插入图片描述
在这里插入图片描述
进行单独方法的测试也报错了
在这里插入图片描述

PS C:\Users\Administrator\Desktop\web8> & D:/Python/python.exe c:/Users/Administrator/Desktop/web8/CMG_024_test.py CMG_024_test.py::Test_CMG024::test_add_qvlan ------------------------------------------------------------------------------------ live log setup ------------------------------------------------------------------------------------- 17:20:16 - MyBaseTest - INFO - url:::http://192.168.11.110:5066/api/TestReport/create-report 17:20:16 - MyBaseTest - INFO - Report Create successfully. Report ID: 317 17:20:18 - MyBaseTest - INFO - Base Proxy address:localhost:8081 DevTools listening on ws://127.0.0.1:58322/devtools/browser/265bb708-e8e6-4d4b-9376-b87f130d5136 [26244:19408:0809/172019.494:ERROR:sandbox_win.cc(840)] Sandbox cannot access executable. Check filesystem permissions are valid. See https://bit.ly/31yqMJR.: 鎷掔粷璁块棶銆?(0x5) [26244:22000:0809/172019.591:ERROR:network_service_instance_impl.cc(600)] Network service crashed, restarting service. 17:20:34 - MyBaseTest - ERROR - Sign in Error ERROR [ 33%] CMG_024_test.py::Test_CMG024::test_add_qvlan_port[1234] ERROR [ 66%] CMG_024_test.py::Test_CMG024::test_qvlan_boundary ERROR [100%] ======================================================================================== ERRORS ========================================================================================= _____________________________________________________________________ ERROR at setup of Test_CMG024.test_add_qvlan ______________________________________________________________________ self = <MyBaseTest.BaseTest object at 0x000002680CCA0AD0> def sign_in(self): """执行登录操作(中文版)""" try: self.driver.get(self.dev_ip) time.sleep(3.5) > WebDriverWait(self.driver, 5).until( EC.visibility_of_element_located((By.ID, "password")) ) MyBaseTest.py:303: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ D:\Python\Lib\site-packages\selenium\webdriver\support\wait.py:129: in until value = method(self._driver) ^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\support\expected_conditions.py:217: in _predicate return _element_if_visible(driver.find_element(*locator)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:922: in find_element return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:454: in execute self.error_handler.check_response(response) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x000002680CCA12B0> response = {'status': 404, 'value': '{"value":{"error":"no such window","message":"no such window: target window already closed\\...07FF74CAEA3EF]\\n\\tBaseThreadInitThunk [0x00007FFAFC6FE8D7+23]\\n\\tRtlUserThreadStart [0x00007FFAFD7BC34C+44]\\n"}}'} def check_response(self, response: dict[str, Any]) -> None: """Checks that a JSON response from the WebDriver does not have an error. :Args: - response - The JSON response from the WebDriver server as a dictionary object. :Raises: If the response contains an error message. """ status = response.get("status", None) if not status or status == ErrorCode.SUCCESS: return value = None message = response.get("message", "") screen: str = response.get("screen", "") stacktrace = None if isinstance(status, int): value_json = response.get("value", None) if value_json and isinstance(value_json, str): try: value = json.loads(value_json) if isinstance(value, dict): if len(value) == 1: value = value["value"] status = value.get("error", None) if not status: status = value.get("status", ErrorCode.UNKNOWN_ERROR) message = value.get("value") or value.get("message") if not isinstance(message, str): value = message message = message.get("message") else: message = value.get("message", None) except ValueError: pass exception_class: type[WebDriverException] e = ErrorCode() error_codes = [item for item in dir(e) if not item.startswith("__")] for error_code in error_codes: error_info = getattr(ErrorCode, error_code) if isinstance(error_info, list) and status in error_info: exception_class = getattr(ExceptionMapping, error_code, WebDriverException) break else: exception_class = WebDriverException if not value: value = response["value"] if isinstance(value, str): raise exception_class(value) if message == "" and "message" in value: message = value["message"] screen = None # type: ignore[assignment] if "screen" in value: screen = value["screen"] stacktrace = None st_value = value.get("stackTrace") or value.get("stacktrace") if st_value: if isinstance(st_value, str): stacktrace = st_value.split("\n") else: stacktrace = [] try: for frame in st_value: line = frame.get("lineNumber", "") file = frame.get("fileName", "<anonymous>") if line: file = f"{file}:{line}" meth = frame.get("methodName", "<anonymous>") if "className" in frame: meth = f"{frame['className']}.{meth}" msg = " at %s (%s)" msg = msg % (meth, file) stacktrace.append(msg) except TypeError: pass if exception_class == UnexpectedAlertPresentException: alert_text = None if "data" in value: alert_text = value["data"].get("text") elif "alert" in value: alert_text = value["alert"].get("text") raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here > raise exception_class(message, screen, stacktrace) E selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed E from unknown error: web view not found E (Session info: chrome=127.0.6533.99) E Stacktrace: E GetHandleVerifier [0x00007FF74CB39632+30946] E (No symbol) [0x00007FF74CAEE3C9] E (No symbol) [0x00007FF74C9E6FDA] E (No symbol) [0x00007FF74C9BCB85] E (No symbol) [0x00007FF74CA637A7] E (No symbol) [0x00007FF74CA7A771] E (No symbol) [0x00007FF74CA5C813] E (No symbol) [0x00007FF74CA2A6E5] E (No symbol) [0x00007FF74CA2B021] E GetHandleVerifier [0x00007FF74CC6F83D+1301229] E GetHandleVerifier [0x00007FF74CC7BDB7+1351783] E GetHandleVerifier [0x00007FF74CC72A03+1313971] E GetHandleVerifier [0x00007FF74CB6DD06+245686] E (No symbol) [0x00007FF74CAF758F] E (No symbol) [0x00007FF74CAF3804] E (No symbol) [0x00007FF74CAF3992] E (No symbol) [0x00007FF74CAEA3EF] E BaseThreadInitThunk [0x00007FFAFC6FE8D7+23] E RtlUserThreadStart [0x00007FFAFD7BC34C+44] D:\Python\Lib\site-packages\selenium\webdriver\remote\errorhandler.py:232: NoSuchWindowException During handling of the above exception, another exception occurred: request = <SubRequest 'get_driver' for <Function test_add_qvlan>>, setup_browsermob_proxy = <MyBaseTest.BaseTest object at 0x000002680CCA0AD0> @pytest.fixture(scope="class") def get_driver(request,setup_browsermob_proxy): # 自动登陆实现 setup_browsermob_proxy.load_config() > setup_browsermob_proxy.sign_in() conftest.py:112: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ MyBaseTest.py:336: in sign_in self.take_screenshot("Sign_Error") MyBaseTest.py:250: in take_screenshot self.driver.save_screenshot(screenshot_path) D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:1021: in save_screenshot return self.get_screenshot_as_file(filename) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:996: in get_screenshot_as_file png = self.get_screenshot_as_png() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:1030: in get_screenshot_as_png return b64decode(self.get_screenshot_as_base64().encode("ascii")) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:1040: in get_screenshot_as_base64 return self.execute(Command.SCREENSHOT)["value"] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:454: in execute self.error_handler.check_response(response) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x000002680CCA12B0> response = {'status': 404, 'value': '{"value":{"error":"no such window","message":"no such window: target window already closed\\...07FF74CAEA3EF]\\n\\tBaseThreadInitThunk [0x00007FFAFC6FE8D7+23]\\n\\tRtlUserThreadStart [0x00007FFAFD7BC34C+44]\\n"}}'} def check_response(self, response: dict[str, Any]) -> None: """Checks that a JSON response from the WebDriver does not have an error. :Args: - response - The JSON response from the WebDriver server as a dictionary object. :Raises: If the response contains an error message. """ status = response.get("status", None) if not status or status == ErrorCode.SUCCESS: return value = None message = response.get("message", "") screen: str = response.get("screen", "") stacktrace = None if isinstance(status, int): value_json = response.get("value", None) if value_json and isinstance(value_json, str): try: value = json.loads(value_json) if isinstance(value, dict): if len(value) == 1: value = value["value"] status = value.get("error", None) if not status: status = value.get("status", ErrorCode.UNKNOWN_ERROR) message = value.get("value") or value.get("message") if not isinstance(message, str): value = message message = message.get("message") else: message = value.get("message", None) except ValueError: pass exception_class: type[WebDriverException] e = ErrorCode() error_codes = [item for item in dir(e) if not item.startswith("__")] for error_code in error_codes: error_info = getattr(ErrorCode, error_code) if isinstance(error_info, list) and status in error_info: exception_class = getattr(ExceptionMapping, error_code, WebDriverException) break else: exception_class = WebDriverException if not value: value = response["value"] if isinstance(value, str): raise exception_class(value) if message == "" and "message" in value: message = value["message"] screen = None # type: ignore[assignment] if "screen" in value: screen = value["screen"] stacktrace = None st_value = value.get("stackTrace") or value.get("stacktrace") if st_value: if isinstance(st_value, str): stacktrace = st_value.split("\n") else: stacktrace = [] try: for frame in st_value: line = frame.get("lineNumber", "") file = frame.get("fileName", "<anonymous>") if line: file = f"{file}:{line}" meth = frame.get("methodName", "<anonymous>") if "className" in frame: meth = f"{frame['className']}.{meth}" msg = " at %s (%s)" msg = msg % (meth, file) stacktrace.append(msg) except TypeError: pass if exception_class == UnexpectedAlertPresentException: alert_text = None if "data" in value: alert_text = value["data"].get("text") elif "alert" in value: alert_text = value["alert"].get("text") raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here > raise exception_class(message, screen, stacktrace) E selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed E from unknown error: web view not found E (Session info: chrome=127.0.6533.99) E Stacktrace: E GetHandleVerifier [0x00007FF74CB39632+30946] E (No symbol) [0x00007FF74CAEE3C9] E (No symbol) [0x00007FF74C9E6FDA] E (No symbol) [0x00007FF74C9BCB85] E (No symbol) [0x00007FF74CA637A7] E (No symbol) [0x00007FF74CA7A771] E (No symbol) [0x00007FF74CA5C813] E (No symbol) [0x00007FF74CA2A6E5] E (No symbol) [0x00007FF74CA2B021] E GetHandleVerifier [0x00007FF74CC6F83D+1301229] E GetHandleVerifier [0x00007FF74CC7BDB7+1351783] E GetHandleVerifier [0x00007FF74CC72A03+1313971] E GetHandleVerifier [0x00007FF74CB6DD06+245686] E (No symbol) [0x00007FF74CAF758F] E (No symbol) [0x00007FF74CAF3804] E (No symbol) [0x00007FF74CAF3992] E (No symbol) [0x00007FF74CAEA3EF] E BaseThreadInitThunk [0x00007FFAFC6FE8D7+23] E RtlUserThreadStart [0x00007FFAFD7BC34C+44] D:\Python\Lib\site-packages\selenium\webdriver\remote\errorhandler.py:232: NoSuchWindowException ---------------------------------------------------------------------------------- Captured log setup ----------------------------------------------------------------------------------- INFO MyBaseTest:MyBaseTest.py:758 url:::http://192.168.11.110:5066/api/TestReport/create-report INFO MyBaseTest:MyBaseTest.py:773 Report Create successfully. Report ID: 317 INFO MyBaseTest:MyBaseTest.py:62 Base Proxy address:localhost:8081 ERROR MyBaseTest:MyBaseTest.py:335 Sign in Error ________________________________________________________________ ERROR at setup of Test_CMG024.test_add_qvlan_port[1234] ________________________________________________________________ self = <MyBaseTest.BaseTest object at 0x000002680CCA0AD0> def sign_in(self): """执行登录操作(中文版)""" try: self.driver.get(self.dev_ip) time.sleep(3.5) > WebDriverWait(self.driver, 5).until( EC.visibility_of_element_located((By.ID, "password")) ) MyBaseTest.py:303: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ D:\Python\Lib\site-packages\selenium\webdriver\support\wait.py:129: in until value = method(self._driver) ^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\support\expected_conditions.py:217: in _predicate return _element_if_visible(driver.find_element(*locator)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:922: in find_element return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:454: in execute self.error_handler.check_response(response) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x000002680CCA12B0> response = {'status': 404, 'value': '{"value":{"error":"no such window","message":"no such window: target window already closed\\...07FF74CAEA3EF]\\n\\tBaseThreadInitThunk [0x00007FFAFC6FE8D7+23]\\n\\tRtlUserThreadStart [0x00007FFAFD7BC34C+44]\\n"}}'} def check_response(self, response: dict[str, Any]) -> None: """Checks that a JSON response from the WebDriver does not have an error. :Args: - response - The JSON response from the WebDriver server as a dictionary object. :Raises: If the response contains an error message. """ status = response.get("status", None) if not status or status == ErrorCode.SUCCESS: return value = None message = response.get("message", "") screen: str = response.get("screen", "") stacktrace = None if isinstance(status, int): value_json = response.get("value", None) if value_json and isinstance(value_json, str): try: value = json.loads(value_json) if isinstance(value, dict): if len(value) == 1: value = value["value"] status = value.get("error", None) if not status: status = value.get("status", ErrorCode.UNKNOWN_ERROR) message = value.get("value") or value.get("message") if not isinstance(message, str): value = message message = message.get("message") else: message = value.get("message", None) except ValueError: pass exception_class: type[WebDriverException] e = ErrorCode() error_codes = [item for item in dir(e) if not item.startswith("__")] for error_code in error_codes: error_info = getattr(ErrorCode, error_code) if isinstance(error_info, list) and status in error_info: exception_class = getattr(ExceptionMapping, error_code, WebDriverException) break else: exception_class = WebDriverException if not value: value = response["value"] if isinstance(value, str): raise exception_class(value) if message == "" and "message" in value: message = value["message"] screen = None # type: ignore[assignment] if "screen" in value: screen = value["screen"] stacktrace = None st_value = value.get("stackTrace") or value.get("stacktrace") if st_value: if isinstance(st_value, str): stacktrace = st_value.split("\n") else: stacktrace = [] try: for frame in st_value: line = frame.get("lineNumber", "") file = frame.get("fileName", "<anonymous>") if line: file = f"{file}:{line}" meth = frame.get("methodName", "<anonymous>") if "className" in frame: meth = f"{frame['className']}.{meth}" msg = " at %s (%s)" msg = msg % (meth, file) stacktrace.append(msg) except TypeError: pass if exception_class == UnexpectedAlertPresentException: alert_text = None if "data" in value: alert_text = value["data"].get("text") elif "alert" in value: alert_text = value["alert"].get("text") raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here > raise exception_class(message, screen, stacktrace) E selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed E from unknown error: web view not found E (Session info: chrome=127.0.6533.99) E Stacktrace: E GetHandleVerifier [0x00007FF74CB39632+30946] E (No symbol) [0x00007FF74CAEE3C9] E (No symbol) [0x00007FF74C9E6FDA] E (No symbol) [0x00007FF74C9BCB85] E (No symbol) [0x00007FF74CA637A7] E (No symbol) [0x00007FF74CA7A771] E (No symbol) [0x00007FF74CA5C813] E (No symbol) [0x00007FF74CA2A6E5] E (No symbol) [0x00007FF74CA2B021] E GetHandleVerifier [0x00007FF74CC6F83D+1301229] E GetHandleVerifier [0x00007FF74CC7BDB7+1351783] E GetHandleVerifier [0x00007FF74CC72A03+1313971] E GetHandleVerifier [0x00007FF74CB6DD06+245686] E (No symbol) [0x00007FF74CAF758F] E (No symbol) [0x00007FF74CAF3804] E (No symbol) [0x00007FF74CAF3992] E (No symbol) [0x00007FF74CAEA3EF] E BaseThreadInitThunk [0x00007FFAFC6FE8D7+23] E RtlUserThreadStart [0x00007FFAFD7BC34C+44] D:\Python\Lib\site-packages\selenium\webdriver\remote\errorhandler.py:232: NoSuchWindowException During handling of the above exception, another exception occurred: request = <SubRequest 'get_driver' for <Function test_add_qvlan>>, setup_browsermob_proxy = <MyBaseTest.BaseTest object at 0x000002680CCA0AD0> @pytest.fixture(scope="class") def get_driver(request,setup_browsermob_proxy): # 自动登陆实现 setup_browsermob_proxy.load_config() > setup_browsermob_proxy.sign_in() conftest.py:112: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ MyBaseTest.py:336: in sign_in self.take_screenshot("Sign_Error") MyBaseTest.py:250: in take_screenshot self.driver.save_screenshot(screenshot_path) D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:1021: in save_screenshot return self.get_screenshot_as_file(filename) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:996: in get_screenshot_as_file png = self.get_screenshot_as_png() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:1030: in get_screenshot_as_png return b64decode(self.get_screenshot_as_base64().encode("ascii")) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:1040: in get_screenshot_as_base64 return self.execute(Command.SCREENSHOT)["value"] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:454: in execute self.error_handler.check_response(response) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x000002680CCA12B0> response = {'status': 404, 'value': '{"value":{"error":"no such window","message":"no such window: target window already closed\\...07FF74CAEA3EF]\\n\\tBaseThreadInitThunk [0x00007FFAFC6FE8D7+23]\\n\\tRtlUserThreadStart [0x00007FFAFD7BC34C+44]\\n"}}'} def check_response(self, response: dict[str, Any]) -> None: """Checks that a JSON response from the WebDriver does not have an error. :Args: - response - The JSON response from the WebDriver server as a dictionary object. :Raises: If the response contains an error message. """ status = response.get("status", None) if not status or status == ErrorCode.SUCCESS: return value = None message = response.get("message", "") screen: str = response.get("screen", "") stacktrace = None if isinstance(status, int): value_json = response.get("value", None) if value_json and isinstance(value_json, str): try: value = json.loads(value_json) if isinstance(value, dict): if len(value) == 1: value = value["value"] status = value.get("error", None) if not status: status = value.get("status", ErrorCode.UNKNOWN_ERROR) message = value.get("value") or value.get("message") if not isinstance(message, str): value = message message = message.get("message") else: message = value.get("message", None) except ValueError: pass exception_class: type[WebDriverException] e = ErrorCode() error_codes = [item for item in dir(e) if not item.startswith("__")] for error_code in error_codes: error_info = getattr(ErrorCode, error_code) if isinstance(error_info, list) and status in error_info: exception_class = getattr(ExceptionMapping, error_code, WebDriverException) break else: exception_class = WebDriverException if not value: value = response["value"] if isinstance(value, str): raise exception_class(value) if message == "" and "message" in value: message = value["message"] screen = None # type: ignore[assignment] if "screen" in value: screen = value["screen"] stacktrace = None st_value = value.get("stackTrace") or value.get("stacktrace") if st_value: if isinstance(st_value, str): stacktrace = st_value.split("\n") else: stacktrace = [] try: for frame in st_value: line = frame.get("lineNumber", "") file = frame.get("fileName", "<anonymous>") if line: file = f"{file}:{line}" meth = frame.get("methodName", "<anonymous>") if "className" in frame: meth = f"{frame['className']}.{meth}" msg = " at %s (%s)" msg = msg % (meth, file) stacktrace.append(msg) except TypeError: pass if exception_class == UnexpectedAlertPresentException: alert_text = None if "data" in value: alert_text = value["data"].get("text") elif "alert" in value: alert_text = value["alert"].get("text") raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here > raise exception_class(message, screen, stacktrace) E selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed E from unknown error: web view not found E (Session info: chrome=127.0.6533.99) E Stacktrace: E GetHandleVerifier [0x00007FF74CB39632+30946] E (No symbol) [0x00007FF74CAEE3C9] E (No symbol) [0x00007FF74C9E6FDA] E (No symbol) [0x00007FF74C9BCB85] E (No symbol) [0x00007FF74CA637A7] E (No symbol) [0x00007FF74CA7A771] E (No symbol) [0x00007FF74CA5C813] E (No symbol) [0x00007FF74CA2A6E5] E (No symbol) [0x00007FF74CA2B021] E GetHandleVerifier [0x00007FF74CC6F83D+1301229] E GetHandleVerifier [0x00007FF74CC7BDB7+1351783] E GetHandleVerifier [0x00007FF74CC72A03+1313971] E GetHandleVerifier [0x00007FF74CB6DD06+245686] E (No symbol) [0x00007FF74CAF758F] E (No symbol) [0x00007FF74CAF3804] E (No symbol) [0x00007FF74CAF3992] E (No symbol) [0x00007FF74CAEA3EF] E BaseThreadInitThunk [0x00007FFAFC6FE8D7+23] E RtlUserThreadStart [0x00007FFAFD7BC34C+44] D:\Python\Lib\site-packages\selenium\webdriver\remote\errorhandler.py:232: NoSuchWindowException ___________________________________________________________________ ERROR at setup of Test_CMG024.test_qvlan_boundary ___________________________________________________________________ self = <MyBaseTest.BaseTest object at 0x000002680CCA0AD0> def sign_in(self): """执行登录操作(中文版)""" try: self.driver.get(self.dev_ip) time.sleep(3.5) > WebDriverWait(self.driver, 5).until( EC.visibility_of_element_located((By.ID, "password")) ) MyBaseTest.py:303: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ D:\Python\Lib\site-packages\selenium\webdriver\support\wait.py:129: in until value = method(self._driver) ^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\support\expected_conditions.py:217: in _predicate return _element_if_visible(driver.find_element(*locator)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:922: in find_element return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:454: in execute self.error_handler.check_response(response) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x000002680CCA12B0> response = {'status': 404, 'value': '{"value":{"error":"no such window","message":"no such window: target window already closed\\...07FF74CAEA3EF]\\n\\tBaseThreadInitThunk [0x00007FFAFC6FE8D7+23]\\n\\tRtlUserThreadStart [0x00007FFAFD7BC34C+44]\\n"}}'} def check_response(self, response: dict[str, Any]) -> None: """Checks that a JSON response from the WebDriver does not have an error. :Args: - response - The JSON response from the WebDriver server as a dictionary object. :Raises: If the response contains an error message. """ status = response.get("status", None) if not status or status == ErrorCode.SUCCESS: return value = None message = response.get("message", "") screen: str = response.get("screen", "") stacktrace = None if isinstance(status, int): value_json = response.get("value", None) if value_json and isinstance(value_json, str): try: value = json.loads(value_json) if isinstance(value, dict): if len(value) == 1: value = value["value"] status = value.get("error", None) if not status: status = value.get("status", ErrorCode.UNKNOWN_ERROR) message = value.get("value") or value.get("message") if not isinstance(message, str): value = message message = message.get("message") else: message = value.get("message", None) except ValueError: pass exception_class: type[WebDriverException] e = ErrorCode() error_codes = [item for item in dir(e) if not item.startswith("__")] for error_code in error_codes: error_info = getattr(ErrorCode, error_code) if isinstance(error_info, list) and status in error_info: exception_class = getattr(ExceptionMapping, error_code, WebDriverException) break else: exception_class = WebDriverException if not value: value = response["value"] if isinstance(value, str): raise exception_class(value) if message == "" and "message" in value: message = value["message"] screen = None # type: ignore[assignment] if "screen" in value: screen = value["screen"] stacktrace = None st_value = value.get("stackTrace") or value.get("stacktrace") if st_value: if isinstance(st_value, str): stacktrace = st_value.split("\n") else: stacktrace = [] try: for frame in st_value: line = frame.get("lineNumber", "") file = frame.get("fileName", "<anonymous>") if line: file = f"{file}:{line}" meth = frame.get("methodName", "<anonymous>") if "className" in frame: meth = f"{frame['className']}.{meth}" msg = " at %s (%s)" msg = msg % (meth, file) stacktrace.append(msg) except TypeError: pass if exception_class == UnexpectedAlertPresentException: alert_text = None if "data" in value: alert_text = value["data"].get("text") elif "alert" in value: alert_text = value["alert"].get("text") raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here > raise exception_class(message, screen, stacktrace) E selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed E from unknown error: web view not found E (Session info: chrome=127.0.6533.99) E Stacktrace: E GetHandleVerifier [0x00007FF74CB39632+30946] E (No symbol) [0x00007FF74CAEE3C9] E (No symbol) [0x00007FF74C9E6FDA] E (No symbol) [0x00007FF74C9BCB85] E (No symbol) [0x00007FF74CA637A7] E (No symbol) [0x00007FF74CA7A771] E (No symbol) [0x00007FF74CA5C813] E (No symbol) [0x00007FF74CA2A6E5] E (No symbol) [0x00007FF74CA2B021] E GetHandleVerifier [0x00007FF74CC6F83D+1301229] E GetHandleVerifier [0x00007FF74CC7BDB7+1351783] E GetHandleVerifier [0x00007FF74CC72A03+1313971] E GetHandleVerifier [0x00007FF74CB6DD06+245686] E (No symbol) [0x00007FF74CAF758F] E (No symbol) [0x00007FF74CAF3804] E (No symbol) [0x00007FF74CAF3992] E (No symbol) [0x00007FF74CAEA3EF] E BaseThreadInitThunk [0x00007FFAFC6FE8D7+23] E RtlUserThreadStart [0x00007FFAFD7BC34C+44] D:\Python\Lib\site-packages\selenium\webdriver\remote\errorhandler.py:232: NoSuchWindowException During handling of the above exception, another exception occurred: request = <SubRequest 'get_driver' for <Function test_add_qvlan>>, setup_browsermob_proxy = <MyBaseTest.BaseTest object at 0x000002680CCA0AD0> @pytest.fixture(scope="class") def get_driver(request,setup_browsermob_proxy): # 自动登陆实现 setup_browsermob_proxy.load_config() > setup_browsermob_proxy.sign_in() conftest.py:112: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ MyBaseTest.py:336: in sign_in self.take_screenshot("Sign_Error") MyBaseTest.py:250: in take_screenshot self.driver.save_screenshot(screenshot_path) D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:1021: in save_screenshot return self.get_screenshot_as_file(filename) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:996: in get_screenshot_as_file png = self.get_screenshot_as_png() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:1030: in get_screenshot_as_png return b64decode(self.get_screenshot_as_base64().encode("ascii")) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:1040: in get_screenshot_as_base64 return self.execute(Command.SCREENSHOT)["value"] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ D:\Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py:454: in execute self.error_handler.check_response(response) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x000002680CCA12B0> response = {'status': 404, 'value': '{"value":{"error":"no such window","message":"no such window: target window already closed\\...07FF74CAEA3EF]\\n\\tBaseThreadInitThunk [0x00007FFAFC6FE8D7+23]\\n\\tRtlUserThreadStart [0x00007FFAFD7BC34C+44]\\n"}}'} def check_response(self, response: dict[str, Any]) -> None: """Checks that a JSON response from the WebDriver does not have an error. :Args: - response - The JSON response from the WebDriver server as a dictionary object. :Raises: If the response contains an error message. """ status = response.get("status", None) if not status or status == ErrorCode.SUCCESS: return value = None message = response.get("message", "") screen: str = response.get("screen", "") stacktrace = None if isinstance(status, int): value_json = response.get("value", None) if value_json and isinstance(value_json, str): try: value = json.loads(value_json) if isinstance(value, dict): if len(value) == 1: value = value["value"] status = value.get("error", None) if not status: status = value.get("status", ErrorCode.UNKNOWN_ERROR) message = value.get("value") or value.get("message") if not isinstance(message, str): value = message message = message.get("message") else: message = value.get("message", None) except ValueError: pass exception_class: type[WebDriverException] e = ErrorCode() error_codes = [item for item in dir(e) if not item.startswith("__")] for error_code in error_codes: error_info = getattr(ErrorCode, error_code) if isinstance(error_info, list) and status in error_info: exception_class = getattr(ExceptionMapping, error_code, WebDriverException) break else: exception_class = WebDriverException if not value: value = response["value"] if isinstance(value, str): raise exception_class(value) if message == "" and "message" in value: message = value["message"] screen = None # type: ignore[assignment] if "screen" in value: screen = value["screen"] stacktrace = None st_value = value.get("stackTrace") or value.get("stacktrace") if st_value: if isinstance(st_value, str): stacktrace = st_value.split("\n") else: stacktrace = [] try: for frame in st_value: line = frame.get("lineNumber", "") file = frame.get("fileName", "<anonymous>") if line: file = f"{file}:{line}" meth = frame.get("methodName", "<anonymous>") if "className" in frame: meth = f"{frame['className']}.{meth}" msg = " at %s (%s)" msg = msg % (meth, file) stacktrace.append(msg) except TypeError: pass if exception_class == UnexpectedAlertPresentException: alert_text = None if "data" in value: alert_text = value["data"].get("text") elif "alert" in value: alert_text = value["alert"].get("text") raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here > raise exception_class(message, screen, stacktrace) E selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed E from unknown error: web view not found E (Session info: chrome=127.0.6533.99) E Stacktrace: E GetHandleVerifier [0x00007FF74CB39632+30946] E (No symbol) [0x00007FF74CAEE3C9] E (No symbol) [0x00007FF74C9E6FDA] E (No symbol) [0x00007FF74C9BCB85] E (No symbol) [0x00007FF74CA637A7] E (No symbol) [0x00007FF74CA7A771] E (No symbol) [0x00007FF74CA5C813] E (No symbol) [0x00007FF74CA2A6E5] E (No symbol) [0x00007FF74CA2B021] E GetHandleVerifier [0x00007FF74CC6F83D+1301229] E GetHandleVerifier [0x00007FF74CC7BDB7+1351783] E GetHandleVerifier [0x00007FF74CC72A03+1313971] E GetHandleVerifier [0x00007FF74CB6DD06+245686] E (No symbol) [0x00007FF74CAF758F] E (No symbol) [0x00007FF74CAF3804] E (No symbol) [0x00007FF74CAF3992] E (No symbol) [0x00007FF74CAEA3EF] E BaseThreadInitThunk [0x00007FFAFC6FE8D7+23] E RtlUserThreadStart [0x00007FFAFD7BC34C+44] D:\Python\Lib\site-packages\selenium\webdriver\remote\errorhandler.py:232: NoSuchWindowException =================================================================================== warnings summary ==================================================================================== CMG_024_test.py:232 c:\Users\Administrator\Desktop\web8\CMG_024_test.py:232: PytestUnknownMarkWarning: Unknown pytest.mark.repeat - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.repeat(6) -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html -------------------------------------------------------- generated xml file: C:\Users\Administrator\Desktop\web8\testresults.xml -------------------------------------------------------- HTTP error occurred: 404 Client Error: Not Found for url: http://192.168.11.110:5066/api/TestReport/upload-test-summary?reportId=0&endTime=1754731236491 ------------------------------------------------- Generated html report: file:///C:/Users/Administrator/Desktop/web8/report/report.html ------------------------------------------------- ================================================================================ short test summary info ================================================================================ ERROR CMG_024_test.py::Test_CMG024::test_add_qvlan - selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed ERROR CMG_024_test.py::Test_CMG024::test_add_qvlan_port[1234] - selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed ERROR CMG_024_test.py::Test_CMG024::test_qvlan_boundary - selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed ============================================================================= 1 warning, 3 errors in 20.23s ============================================================================= PS C:\Users\Administrator\Desktop\web8>
最新发布
08-10
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.edge.service import Service from selenium.webdriver.edge.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.action_chains import ActionChains import time # 配置Edge浏览器选项 def configure_edge_options(): """配置Edge浏览器选项""" options = Options() options.add_argument("--start-maximized") # 最大化窗口 options.add_argument("--disable-notifications") # 禁用通知 # options.add_argument("--headless") # 无头模式(可选) options.add_experimental_option("excludeSwitches", ["enable-automation"]) # 隐藏自动化控制提示 options.add_experimental_option("useAutomationExtension", False) # 禁用自动化扩展 return options # 初始化Edge浏览器驱动 def init_edge_driver(): """初始化Edge浏览器驱动""" try: # 尝试使用webdriver-manager自动管理驱动 from webdriver_manager.microsoft import EdgeChromiumDriverManager service = Service(EdgeChromiumDriverManager().install()) return webdriver.Edge(service=service, options=configure_edge_options()) except: # 如果自动管理失败,尝试手动指定路径 try: # Windows默认路径 service = Service(executable_path="C:/Program Files (x86)/Microsoft/Edge/Application/msedgedriver.exe") return webdriver.Edge(service=service, options=configure_edge_options()) except: # Linux/Mac路径 service = Service(executable_path="/usr/local/bin/msedgedriver") return webdriver.Edge(service=service, options=configure_edge_options()) # 初始化浏览器 driver = init_edge_driver() try: # 1. 打开网页 print("打开百度首页...") driver.get("https://www.baidu.com") # 2. 获取页面标题和URL print(f"页面标题: {driver.title}") print(f"当前URL: {driver.current_url}") # 3. 定位元素并输入搜索词 search_box = driver.find_element(By.ID, "kw") search_box.send_keys("Selenium Edge浏览器自动化") # 4. 提交搜索表单 search_box.submit() # 5. 显式等待结果加载 print("等待搜索结果加载...") WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "content_left")) ) # 6. 获取搜索结果数量 result_stats = driver.find_element(By.CLASS_NAME, "nums_text").text print(f"搜索结果: {result_stats}") # 7. 点击第一个搜索结果 first_result = driver.find_element(By.CSS_SELECTOR, "#content_left .result-op h3 a") first_result.click() # 8. 切换到新标签页 print("切换到新标签页...") driver.switch_to.window(driver.window_handles[-1]) # 9. 页面滚动 print("滚动页面...") driver.execute_script("window.scrollTo(0, document.body.scrollHeight/2);") time.sleep(1) driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(1) driver.execute_script("window.scrollTo(0, 0);") # 10. 鼠标悬停操作 print("执行鼠标悬停操作...") try: # 尝试在页面上找到可悬停的元素 hover_element = driver.find_element(By.CSS_SELECTOR, "nav a") ActionChains(driver).move_to_element(hover_element).perform() time.sleep(1) except: print("未找到可悬停元素,跳过此步骤") # 11. 浏览器导航操作 print("浏览器导航操作...") driver.back() # 返回上一页 time.sleep(1) driver.forward() # 前进 time.sleep(1) driver.refresh() # 刷新页面 time.sleep(1) # 12. 处理弹窗 print("处理JavaScript弹窗...") # 触发一个alert弹窗 driver.execute_script("alert('这是Selenium测试弹窗!');") # 切换到弹窗并接受 alert = driver.switch_to.alert print(f"弹窗内容: {alert.text}") alert.accept() # 13. 操作浏览器窗口 print("操作浏览器窗口...") # 获取当前窗口大小 print(f"当前窗口尺寸: {driver.get_window_size()}") # 设置窗口大小 driver.set_window_size(800, 600) time.sleep(1) # 最大化窗口 driver.maximize_window() time.sleep(1) # 14. 获取页面截图 print("保存页面截图...") driver.save_screenshot("selenium_screenshot.png") # 15. 获取页面源码 # print("获取页面源码...") # page_source = driver.page_source # with open("page_source.html", "w", encoding="utf-8") as f: # f.write(page_source) print("所有基础操作执行完成!") finally: # 16. 关闭浏览器 input("按Enter键关闭浏览器...") # 用于演示时查看结果 driver.quit() print("浏览器已关闭") 运行结果: ValueError Traceback (most recent call last) Cell In[9], line 28, in init_edge_driver() 27 from webdriver_manager.microsoft import EdgeChromiumDriverManager ---> 28 service = Service(EdgeChromiumDriverManager().install()) 29 return webdriver.Edge(service=service, options=configure_edge_options()) File ~\AppData\Roaming\Python\Python313\site-packages\webdriver_manager\microsoft.py:73, in EdgeChromiumDriverManager.install(self) 72 def install(self) -> str: ---> 73 driver_path = self._get_driver_binary_path(self.driver) 74 os.chmod(driver_path, 0o755) File ~\AppData\Roaming\Python\Python313\site-packages\webdriver_manager\core\manager.py:35, in DriverManager._get_driver_binary_path(self, driver) 34 def _get_driver_binary_path(self, driver): ---> 35 binary_path = self._cache_manager.find_driver(driver) 36 if binary_path: File ~\AppData\Roaming\Python\Python313\site-packages\webdriver_manager\core\driver_cache.py:107, in DriverCacheManager.find_driver(self, driver) 105 return None --> 107 driver_version = self.get_cache_key_driver_version(driver) 108 metadata = self.load_metadata_content() File ~\AppData\Roaming\Python\Python313\site-packages\webdriver_manager\core\driver_cache.py:154, in DriverCacheManager.get_cache_key_driver_version(self, driver) 153 return self._cache_key_driver_version --> 154 return driver.get_driver_version_to_download() File ~\AppData\Roaming\Python\Python313\site-packages\webdriver_manager\core\driver.py:48, in Driver.get_driver_version_to_download(self) 46 return self._driver_version_to_download ---> 48 return self.get_latest_release_version() File ~\AppData\Roaming\Python\Python313\site-packages\webdriver_manager\drivers\edge.py:51, in EdgeChromiumDriver.get_latest_release_version(self) 43 latest_release_url = { 44 OSType.WIN 45 in os_type: f"{self._latest_release_url}_{major_edge_version}_WINDOWS", (...) 49 in os_type: f"{self._latest_release_url}_{major_edge_version}_LINUX", 50 }[True] ---> 51 resp = self._http_client.get(url=latest_release_url) 52 return resp.text.rstrip() File ~\AppData\Roaming\Python\Python313\site-packages\webdriver_manager\core\http.py:36, in WDMHttpClient.get(self, url, **kwargs) 35 raise exceptions.ConnectionError(f"Could not reach host. Are you offline?") ---> 36 self.validate_response(resp) 37 return resp File ~\AppData\Roaming\Python\Python313\site-packages\webdriver_manager\core\http.py:15, in HttpClient.validate_response(resp) 14 if status_code == 404: ---> 15 raise ValueError(f"There is no such driver by url {resp.url}") 16 elif status_code == 401: ValueError: There is no such driver by url https://msedgedriver.azureedge.net/LATEST_RELEASE_138_WINDOWS During handling of the above exception, another exception occurred: ValueError Traceback (most recent call last) File ~\AppData\Roaming\Python\Python313\site-packages\selenium\webdriver\common\driver_finder.py:64, in DriverFinder._binary_paths(self) 63 if not Path(path).is_file(): ---> 64 raise ValueError(f"The path is not a valid file: {path}") 65 self._paths["driver_path"] = path ValueError: The path is not a valid file: C:/Program Files (x86)/Microsoft/Edge/Application/msedgedriver.exe The above exception was the direct cause of the following exception: NoSuchDriverException Traceback (most recent call last) Cell In[9], line 35, in init_edge_driver() 34 service = Service(executable_path="C:/Program Files (x86)/Microsoft/Edge/Application/msedgedriver.exe") ---> 35 return webdriver.Edge(service=service, options=configure_edge_options()) 36 except: 37 # Linux/Mac路径 File ~\AppData\Roaming\Python\Python313\site-packages\selenium\webdriver\edge\webdriver.py:47, in WebDriver.__init__(self, options, service, keep_alive) 45 options = options if options else Options() ---> 47 super().__init__( 48 browser_name=DesiredCapabilities.EDGE["browserName"], 49 vendor_prefix="ms", 50 options=options, 51 service=service, 52 keep_alive=keep_alive, 53 ) File ~\AppData\Roaming\Python\Python313\site-packages\selenium\webdriver\chromium\webdriver.py:53, in ChromiumDriver.__init__(self, browser_name, vendor_prefix, options, service, keep_alive) 52 finder = DriverFinder(self.service, options) ---> 53 if finder.get_browser_path(): 54 options.binary_location = finder.get_browser_path() File ~\AppData\Roaming\Python\Python313\site-packages\selenium\webdriver\common\driver_finder.py:47, in DriverFinder.get_browser_path(self) 46 def get_browser_path(self) -> str: ---> 47 return self._binary_paths()["browser_path"] File ~\AppData\Roaming\Python\Python313\site-packages\selenium\webdriver\common\driver_finder.py:78, in DriverFinder._binary_paths(self) 77 msg = f"Unable to obtain driver for {browser}" ---> 78 raise NoSuchDriverException(msg) from err 79 return self._paths NoSuchDriverException: Message: Unable to obtain driver for MicrosoftEdge; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors/driver_location During handling of the above exception, another exception occurred: ValueError Traceback (most recent call last) File ~\AppData\Roaming\Python\Python313\site-packages\selenium\webdriver\common\driver_finder.py:64, in DriverFinder._binary_paths(self) 63 if not Path(path).is_file(): ---> 64 raise ValueError(f"The path is not a valid file: {path}") 65 self._paths["driver_path"] = path ValueError: The path is not a valid file: /usr/local/bin/msedgedriver The above exception was the direct cause of the following exception: NoSuchDriverException Traceback (most recent call last) Cell In[9], line 42 39 return webdriver.Edge(service=service, options=configure_edge_options()) 41 # 初始化浏览器 ---> 42 driver = init_edge_driver() 44 try: 45 # 1. 打开网页 46 print("打开百度首页...") Cell In[9], line 39, in init_edge_driver() 36 except: 37 # Linux/Mac路径 38 service = Service(executable_path="/usr/local/bin/msedgedriver") ---> 39 return webdriver.Edge(service=service, options=configure_edge_options()) File ~\AppData\Roaming\Python\Python313\site-packages\selenium\webdriver\edge\webdriver.py:47, in WebDriver.__init__(self, options, service, keep_alive) 44 service = service if service else Service() 45 options = options if options else Options() ---> 47 super().__init__( 48 browser_name=DesiredCapabilities.EDGE["browserName"], 49 vendor_prefix="ms", 50 options=options, 51 service=service, 52 keep_alive=keep_alive, 53 ) File ~\AppData\Roaming\Python\Python313\site-packages\selenium\webdriver\chromium\webdriver.py:53, in ChromiumDriver.__init__(self, browser_name, vendor_prefix, options, service, keep_alive) 50 self.service = service 52 finder = DriverFinder(self.service, options) ---> 53 if finder.get_browser_path(): 54 options.binary_location = finder.get_browser_path() 55 options.browser_version = None File ~\AppData\Roaming\Python\Python313\site-packages\selenium\webdriver\common\driver_finder.py:47, in DriverFinder.get_browser_path(self) 46 def get_browser_path(self) -> str: ---> 47 return self._binary_paths()["browser_path"] File ~\AppData\Roaming\Python\Python313\site-packages\selenium\webdriver\common\driver_finder.py:78, in DriverFinder._binary_paths(self) 76 except Exception as err: 77 msg = f"Unable to obtain driver for {browser}" ---> 78 raise NoSuchDriverException(msg) from err 79 return self._paths NoSuchDriverException: Message: Unable to obtain driver for MicrosoftEdge; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors/driver_location
08-09
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值