undetected_chromedriver 控制已打开的浏览器

复制代码
def get_options():
    options = ChromeOptions()
    options.add_argument("--disable-blink-features=AutomationControlled")
    # options.add_experimental_option("excludeSwitches", ["enable-automation"])
    # options.add_experimental_option("useAutomationExtension", False)
    options.add_argument("--disable-extensions")
    options.add_argument("--no-default-browser-check")
    options.add_argument("--no-first-run")
    options.add_argument("--disable-popup-blocking")
    options.add_argument("--disable-default-apps")
    options.add_argument("--disable-infobars")
    # options.add_argument("--disable-gpu")
    # options.add_argument("--disable-notifications")
    options.add_argument("--disable-translate")
    options.add_argument("--disable-device-discovery-notifications")
    options.add_argument("--no-sandbox")
    # options.add_argument("--disable-dev-shm-usage")
    options.add_argument("--window-size=1920x1080")
    options.add_argument("--disable-features=VizDisplayCompositor")
    return options

def getchromeversion():
    if 'win' in sys.platform:
        import winreg
        key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Google\Chrome\BLBeacon')
        chrome_version = winreg.QueryValueEx(key, 'version')[0]
        return chrome_version
    else:
        from webdriver_manager.utils import get_browser_version_from_os
        browserVersion = get_browser_version_from_os("google-chrome")  # 获取当前系统chrome浏览器的版本号
        print(f'Chrome version is {browserVersion}')
        mainBrowserVersion = browserVersion.split(".")[0]  # 获取chrome浏览器的主版本号
        return browserVersion


def get_session_url(port):
    url = f'http://127.0.0.1:{port}/json/version'
    try:
        res = requests.get(url)
        print(res.text)
        webSocketDebuggerUrl = json.loads(res.text)['webSocketDebuggerUrl']
    except:
        # 命令行启动
        time.sleep(random.randint(4, 6))


def start_brower():
    from undetected_chromedriver import Chrome, ChromeOptions, find_chrome_executable
    user_data_name = "chrome1"
    port = 9315
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
    current_path = os.path.dirname(os.path.realpath(sys.argv[0]))
    # 浏览器用户配置文件
    user_data_dir = os.path.join(current_path, user_data_name)
    # 浏览器版本号
    version = getchromeversion().split('.')[0]
    # 下载驱动
    currentpath = os.path.dirname(os.path.realpath(sys.argv[0]))
    executable_path = os.path.join(currentpath, 'chromedriver_win32', f'chromedriver_{version}.exe')
    if not os.path.exists(executable_path):
        # get_chromedriver_version(path, version)
        print('自动下载驱动')
    # 浏览器路径
    chrome_path = find_chrome_executable()
    print('executable_path:', executable_path)
    print('user_data_dir:', user_data_dir)
    print('chrome_path:', chrome_path)

    option = get_options()
    option.add_argument(fr'--user-data-dir="{user_data_dir}"')
    option.add_argument(f"--user-agent={user_agent}")
    option.debugger_address = f"127.0.0.1:{port}"
    driver = Chrome(options=option, executable_path=executable_path)
    print(driver.title)
    time.sleep(2)
    driver.get('https://blog.csdn.net/lwdfzr/article/details/135410359')
    time.sleep(random.randint(3, 5))
复制代码
undetected_chromedriver 通过端口控制已打开的浏览器时,会打开一个多余的空白窗口,

鼠标放在Chrome() 按ctrl+B查看源码,找到这段代码,注释掉

相关推荐
天天被压力2 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python
天天被压力2 小时前
【A股分钟级高频数据完全手册 #08】股票日、分时数据接口对比:普通分时与Pro版差异实测
java·人工智能·python
特立独行的猫A2 小时前
AI 时代,我为什么推荐用 cj-tauri 开发桌面应用
java·后端·python
小lo想吃棒棒糖3 小时前
把机器人训练从 GPU 搬到昇腾 NPU:启元 Q1 起身动作 PPO 训练全记录
python·机器人·昇腾·启元机器人
Thanks_ks3 小时前
【第 006 讲】搭建 PyCharm 开发环境:PyCharm 的下载与安装 | 初始设置与常用配置
ide·python·pycharm·开发工具·jetbrains·开发环境·集成开发环境
青少儿编程课堂4 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛
tellmewhoisi4 小时前
nlp:知识库检索和dify知识库创建
python·自然语言处理
2601_968793144 小时前
Python Requests 轻量自动化:无需浏览器,实现真人级账号浏览模拟
开发语言·python·自动化
段一凡-华北理工大学14 小时前
工业智能体:从Codex/Claude到项目实战~系列文章05:从“AI助手“到“工业智能体“:能力跃迁与落地范式
人工智能·python·claude·codex·工业智能体·高炉炼铁智能化
深蓝AI14 小时前
ContextVar 到线程池就丢了?asyncio.to_thread 和 run_in_executor 实测
python