是会员是会员
前不久加入了一个付费的某球会员快到期了好多文件看不了
所以搞了个附件下载。大家可以试试。文件下载适度星球有反扒小心封号
也期待大佬进行完善
脚本运行前需手动下载 chromedriver 并确保路径正确(与代码中的 chrome_driver_path 一致),(需选择与本地 Chrome 浏览器版本匹配的驱动)。下载地址:https://googlechromelabs.github.io/chrome-for-testing/
[Python] 纯文本查看 复制代码import os
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
chrome_driver_path = r"chromedriver.exe"#这个需要你自己下载。浏览器内核不同这个也不一样。
download_dir = r"C:星球资源\知识星球下载文件"#你自己想放哪这个文件就指定哪
options = Options()
options.add_argument("--start-maximized")
options.add_experimental_option("detach", True)
prefs = {
"download.default_directory": download_dir,
"download.prompt_for_download": False,
"directory_upgrade": True,
"safebrowsing.enabled": True
}
options.add_experimental_option("prefs", prefs)
service = Service(executable_path=chrome_driver_path)
driver = webdriver.Chrome(service=service, options=options)
wait = WebDriverWait(driver, 30)
driver.get("https://wx.zsxq.com/login")
input("✅ 请扫码登录完成后按 Enter 继续...")#你得是会员不然没效果
group_url = "https://wx.zsxq.com/group/15552288522142"#这个看你的星球链接替换下就好了
driver.get(group_url)
time.sleep(5)
def hide_overlay():
driver.execute_script("""
let el = document.querySelector('.rank-tips');
if (el) el.style.display = 'none';
""")
def wait_download_button_disappear(timeout=20):
try:
wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR, ".download-wrapper .download")))
except TimeoutException:
pass
def click_outside_popup():
driver.execute_script("""
document.elementFromPoint(10, 10).click();
""")
time.sleep(1)
def get_and_download_all_files():
seen_file_names = set()
prev_count = -1
while True:
try:
hide_overlay()
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "app-file-gallery")))
file_items = driver.find_elements(By.CSS_SELECTOR, "app-file-gallery .item")
print(f"📄 发现文件数量:{len(file_items)}")
for index in range(len(file_items)):
file_items = driver.find_elements(By.CSS_SELECTOR, "app-file-gallery .item")
item = file_items[index]
try:
file_name_elem = item.find_element(By.CLASS_NAME, "file-name")
file_name = file_name_elem.text.strip()
if file_name in seen_file_names:
continue
seen_file_names.add(file_name)
print(f"➡️ 处理文件:{file_name}")
file_path = os.path.join(download_dir, file_name)
if os.path.exists(file_path):
print(f"⏭️ 文件已存在,跳过")
continue
driver.execute_script("arguments[0].click();", item)
time.sleep(1)
download_btns = wait.until(EC.presence_of_all_elements_located(
(By.CSS_SELECTOR, ".download-wrapper .download")
))
download_btn = download_btns[-1]
driver.execute_script("arguments[0].click();", download_btn)
print(f"✅ 点击下载:{file_name}")
wait_download_button_disappear()
click_outside_popup()
time.sleep(1)
except Exception as e:
print(f"⚠️ 处理失败: {e}")
continue
print("🔄 下拉加载更多...")
driver.execute_script("window.scrollBy(0, document.body.scrollHeight);")
time.sleep(3)
new_count = len(driver.find_elements(By.CSS_SELECTOR, "app-file-gallery .item"))
if new_count == prev_count:
print("✅ 全部文件处理完成")
break
prev_count = new_count
except Exception as e:
print(f"❌ 异常终止: {e}")
break
get_and_download_all_files()