本帖最后由 tianmenghuan 于 2024-4-12 09:12 编辑
问题:代码执行之后,如果循环查找的元素不存在的情况下 浏览器自动关闭,程序停止了, except NoSuchElementException: 这一步就不执行,求助大佬[Python] 纯文本查看 复制代码 from tkinter import Tk, Label, Entry, Button
import time
from threading import Thread
from selenium import webdriver
from selenium.webdriver.common.by import By
import pygame
from selenium.common.exceptions import NoSuchElementException
def run_code():
"""
执行具体的操作
"""
driver = webdriver.Chrome()
driver.get("https://www.douyin.com/user/self?showTab=post")
time.sleep(40)
def is_logged_in(driver):
# 尝试查找包含 "流年" 的元素
try:
element = driver.find_element(By.XPATH, "//span[contains(text(), '流年')]")
return True
except NoSuchElementException:
return False
while not is_logged_in(driver):
time.sleep(25) # 等待一段时间
for _ in range(int(entry2.get())):
try:
# 要查找的元素的 XPath
element_xpath = "//span[contains(text(), '流年')]"
element = driver.find_element(By.CSS_SELECTOR, ".tJjNB1rt.RUVRb0oR.RUCDqVRy")
value = element.text
print("元素的值:", value)
if int(value) > 0:
# 在窗口上显示信息
print("出现新的信息,开始执行警报")
# 初始化 pygame 的混音器
pygame.mixer.init()
# 加载声音文件
sound = pygame.mixer.Sound("D:/mp3/jingbao.wav")
# 播放声音
sound.play()
pygame.time.wait(2000) # 等待 2 秒
# 停止音乐
pygame.mixer.music.stop()
tk_label.config(text="注意有新的信息出现,请及时查看")
tk_label.after(10000, lambda: tk_label.config(text=""))
# 等待用户输入的间隔时间
time.sleep(int(entry1.get()))
except NoSuchElementException:
print("暂时没有新的消息,跳过")
tk_label.config(text="暂时没有新的消息,跳过")
tk_label.after(1000, lambda: tk_label.config(text=""))
continue
def thread_runner():
"""
在新线程中运行 run_code 函数
"""
Thread(target=run_code).start()
root = Tk()
root.title("应用程序")
root.geometry("250x110") # 设置窗口大小为 300x100
tk_label = Label(root, text="结果展示", width=30, bd=10, bg="yellow")
tk_label.pack(pady=3)
# 创建第一个输入框和其上方的文字标签
label1 = Label(root, text="间隔时间:")
label1.pack()
label1.place(x=0, y=50)
entry1 = Entry(root, width=8)
entry1.pack()
entry1.place(x=60, y=50)
# 创建第二个输入框和其上方的文字标签
label2 = Label(root, text="循环次数:")
label2.pack()
label2.place(x=0, y=80)
entry2 = Entry(root, width=8)
entry2.pack()
entry2.place(x=60, y=80)
button2 = Button(root, text="查询", width=5, command=thread_runner)
button2.pack(pady=10)
button2.place(x=195, y=60)
root.mainloop()
|