from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.chrome.options import Optionsimport timeimport smtplibfrom email.mime.text import MIMEText# 主播列表anchors = [ {"name": "周部长", "url": "https://www.douyin.com/user/MS4wLjABAAAAeoMuVszxObWFBPpSDc8HfS5GBSj_gG6Ns-6Nvn74sK2OJgFnLhsozOGw5o4YWo4E"}, {"name": "李老师", "url": "https://www.douyin.com/user/MS4wLjABAAAAzKCY3-lmvC51lLIKKiIMFGDVQgGKnXpjIefa7dqbNGk"}, {"name": "池", "url": "https://www.douyin.com/user/MS4wLjABAAAAG7wWa4ENsnLFn_gd-3VPn-FLRosN_NB2YpJW0QmZXpsP2qvSBi38gA6GHj4dWWTT"}]# 邮箱配置(你提供的smtp信息)EMAIL_CONFIG = { "smtp_server": "smtp.189.cn", "smtp_port": 465, "username": "", "password": "", "sender": "", "receiver": ""}def send_email(content): try: msg = MIMEText(content, "plain", "utf-8") msg["Subject"] = "抖音主播直播状态检测报告" msg["From"] = EMAIL_CONFIG["sender"] msg["To"] = EMAIL_CONFIG["receiver"] with smtplib.SMTP_SSL(EMAIL_CONFIG["smtp_server"], EMAIL_CONFIG["smtp_port"]) as server: server.login(EMAIL_CONFIG["username"], EMAIL_CONFIG["password"]) server.sendmail(EMAIL_CONFIG["sender"], EMAIL_CONFIG["receiver"], msg.as_string()) print("📩 邮件发送成功!") except Exception as e: print(f"邮件发送失败:{e}")def check_douyin_live_batch(): chrome_options = Options() chrome_options.add_argument("--headless=new") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument("--window-size=1920,1080") chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36") driver = webdriver.Chrome(options=chrome_options) result = "" for anchor in anchors: name = anchor["name"] url = anchor["url"] line = f"\n===== {name} =====\n" print(line) try: driver.get(url) time.sleep(6) live1 = driver.find_elements(By.XPATH, "//span[contains(text(), '直播中')]") live2 = driver.find_elements(By.XPATH, "//a[contains(., '直播中')]") live3 = driver.find_elements(By.XPATH, "//div[contains(., '直播中')]") enter_btn = driver.find_elements(By.XPATH, "//*[contains(text(), '进入直播间')]") if live1 or live2 or live3 or enter_btn: res = f"✅ {name}:正在直播" else: res = f"❌ {name}:未直播" print(res) result += res + "\n" except Exception as e: err = f"⚠️ {name} 检测失败:{str(e)}" print(err) result += err + "\n" driver.quit() send_email(result)if __name__ == "__main__": check_douyin_live_batch()