如何在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
相关产品推荐
相关产品推荐

