You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jupyter Notebooks中使用PySimpleGUI运行Selenium自动化脚本?可行性咨询

在Jupyter Notebook中结合PySimpleGUI运行Selenium自动化脚本的方案分析

首先,先帮你梳理下现有脚本的问题,再聊聊用PySimpleGUI在Jupyter里运行的可行性,最后给你一个整合后的可用示例。

一、现有脚本的明显问题

你的脚本最后一行/*[@id="synchronavigation"]/ul[1]/li[6]/ul/li[2]/ul/li[6]/a'))).click()是无效代码——多了开头的/*,而且没有对应的WebDriverWait调用,直接删掉这行就能解决语法错误。

另外还有两个可以优化的点:

  • ChromeDriver路径问题:新版Selenium(4.x及以上)已经不需要手动指定chromedriver路径了,直接用webdriver.Chrome()就行,Selenium会自动通过Selenium Manager匹配对应版本的驱动,避免版本不兼容的问题。
  • 重复的等待逻辑:你写了两次几乎一样的try-except等待点击,可以把这段逻辑封装成一个小函数,让代码更简洁易维护。

二、结合PySimpleGUI在Jupyter中运行的可行性

完全可行!PySimpleGUI支持在Jupyter Notebook环境中运行,核心思路是做一个简单的GUI界面(比如一个触发按钮),点击按钮后执行你的Selenium自动化流程,既保留了Jupyter的交互性,又通过GUI简化了脚本触发操作。

三、整合后的完整示例代码

首先在Jupyter Notebook的单元格里安装依赖:

!pip install pysimplegui selenium pandas beautifulsoup4

然后是整合后的代码:

import PySimpleGUI as sg
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time
import pandas as pd
from bs4 import BeautifulSoup

# 封装等待点击元素的函数,避免重复代码
def wait_and_click(driver, by, selector, wait_time=20):
    try:
        WebDriverWait(driver, wait_time).until(EC.element_to_be_clickable((by, selector))).click()
    except:
        time.sleep(15)
        WebDriverWait(driver, wait_time).until(EC.element_to_be_clickable((by, selector))).click()

# 定义PySimpleGUI界面布局
layout = [
    [sg.Text('SYNCHRO自动化脚本')],
    [sg.Button('开始运行'), sg.Button('退出')]
]

# 创建窗口
window = sg.Window('Selenium自动化工具', layout)

# 事件循环
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == '退出':
        break
    if event == '开始运行':
        # 执行Selenium自动化流程
        sg.popup('脚本开始运行,请不要关闭浏览器窗口!')
        driver = webdriver.Chrome()  # 新版Selenium无需指定驱动路径
        driver.get("https://synchro.chs.spawar.navy.mil/synchro/")
        driver.maximize_window()
        
        # 执行登录点击
        wait_and_click(driver, By.CSS_SELECTOR, "div.hexagon.pointer[onclick^='login'][onclick*='LoginCACSynchro'][onclick*='SYNCHRO']")
        # 点击导航菜单
        wait_and_click(driver, By.XPATH, '//*[@id="synchronavigation"]/ul[1]/li[6]/a')
        wait_and_click(driver, By.XPATH, '//*[@id="synchronavigation"]/ul[1]/li[6]/ul/li[2]/a')
        wait_and_click(driver, By.XPATH, '//*[@id="synchronavigation"]/ul[1]/li[6]/ul/li[2]/ul/li[6]/a')
        
        # 这里可以添加后续的爬取/处理逻辑,比如用BeautifulSoup解析页面
        # soup = BeautifulSoup(driver.page_source, 'html.parser')
        # ...
        
        sg.popup('脚本执行完成!')
        driver.quit()

# 关闭窗口
window.close()

四、需要注意的细节

  • CAC登录验证:如果登录需要物理CAC卡的验证(比如插入硬件卡、输入PIN码),这部分Selenium无法自动处理,你的脚本里的time.sleep(15)就是留给手动操作的时间,记得在这段时间内完成验证。
  • Jupyter环境的GUI弹窗:运行时会弹出PySimpleGUI的窗口和Chrome浏览器窗口,不要手动关闭这些窗口,等待脚本执行完成。
  • Selenium版本兼容:确保你的Selenium是4.x及以上版本,如果是旧版本,还是需要手动指定chromedriver路径,或者升级Selenium。

内容的提问来源于stack exchange,提问作者Abwethin85

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 18:47:42