Python + Selenium + Chrome 如何定位百度网盘离线下载按钮

submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#layoutMain > div > div.DxdbeCb.g-clearfix > div.xcldrR3R > div.jzymWxad > div.tcuLAu > a:nth-child(4)")))

submit.click()


这样一直在等待 无法定位
Python + Selenium + Chrome 如何定位百度网盘离线下载按钮

8 回复

其实我建议你去获取 cookies 然后抓包得到下载链接 我搞批量保存就是这么干的


要定位百度网盘离线下载按钮,直接用 find_element 找文本或类名就行。这按钮通常是个 <a> 标签,文本是“离线下载”。页面结构可能会变,但思路不变。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://pan.baidu.com")  # 先登录,这里假设已登录

try:
    # 方法1:通过链接文本定位(最直接)
    offline_btn = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.LINK_TEXT, "离线下载"))
    )
    # 或者用部分链接文本,如果文本是“离线下载任务”
    # offline_btn = driver.find_element(By.PARTIAL_LINK_TEXT, "离线下载")

    # 方法2:通过CSS选择器定位(如果文本定位失败)
    # 通常结构是 <a class="...">离线下载</a>
    # offline_btn = driver.find_element(By.CSS_SELECTOR, "a[title='离线下载']")
    # 或者通过类名,需要检查实际类名,例如:
    # offline_btn = driver.find_element(By.CSS_SELECTOR, ".offline-download-btn")

    # 方法3:通过XPath定位(更灵活但可能更脆弱)
    # offline_btn = driver.find_element(By.XPATH, "//a[contains(text(), '离线下载')]")

    offline_btn.click()
    print("成功点击离线下载按钮")
except Exception as e:
    print(f"定位失败: {e}")
finally:
    driver.quit()

关键点:

  1. 先登录:网盘需要登录才能看到按钮,脚本里要处理好登录(手动或自动)。
  2. 等页面加载完:用 WebDriverWait 等按钮出现再操作,避免 NoSuchElementException
  3. 检查实际HTML:按F12打开开发者工具,看按钮的准确标签、类名或属性,选择最稳定的定位方式。链接文本(LINK_TEXT)通常最可靠。
  4. 注意iframe:如果按钮在 iframe 里,需要先 driver.switch_to.frame() 切换进去。

总结: 优先用 LINK_TEXTPARTIAL_LINK_TEXT 定位,不行再用CSS或XPath,记得加等待。

document.querySelectorAll(‘a[data-button-id=“b3”]’)[0].click()

cookies 已经加载 账号密码登录需要邮箱验证 搞不了 抓的客户端的包?

必须要 js 来点击?

browser.execute_script(‘document.querySelectorAll(‘a[data-button-id=“b3”]’)[0].click()’)
没有反应

不是啊 登陆的 cookies 啊 邮箱验证你不会找个不要的号么…

我自己用 selenium 测试可以 你的为何不行那可能有别的原因了

回到顶部