You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium点击Convert按钮无报错但网站返回Invalid Argument错误如何解决

问题描述

代码执行到最后一行点击Convert按钮将无版权YouTube音乐视频转换为mp3文件时,网站会在按钮下方红色框抛出错误:Invalid Argument。已尝试其他触发方式,包括调用.send_keys(Keys.ENTER)、.submit()方法,均出现相同错误。注:不建议直接访问带转换按钮的目标网站,该网站存在可疑广告,因此操作使用Brave浏览器而非Chrome。

按钮对应HTML代码

<button id="cvt-btn" class="btn btn-danger mr-1">Convert</button>

原始代码

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import StaleElementReferenceException

driver_path = "C:/Users/User/Documents/Python_Projects/chromedriver.exe"
brave_path = "C:/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe"
option = webdriver.ChromeOptions()
option.binary_location = brave_path

driver=webdriver.Chrome(executable_path=driver_path, chrome_options=option)

driver.maximize_window()

driver.implicitly_wait(2)
driver.get("https://www.youtube.com/watch?v=MkNeIUgNPQ8&list=PLzCxunOM5WFLNCSF0UEHZqFJJlmdeL71S")
driver.find_element_by_xpath("/html/body/ytd-app/ytd-consent-bump-v2-lightbox/tp-yt-paper-dialog/div[2]/div[2]/div[5]/div[2]/ytd-button-renderer[2]/a/tp-yt-paper-button").click()
lnks=driver.find_elements_by_tag_name("a")
songs = []
double = False
for lnk in lnks:
   link = lnk.get_attribute("href")
   if link != None:
       if "FJJlmdeL71S&index=2" in link:
           for i in songs:
               if link == i:
                   double = True
               else:
                   double = False
           if double == False:
               songs.append(link)

driver.implicitly_wait(2)
driver.get("https://youtubetomp3music.com/en26/")

for i in songs:
    driver.find_element_by_xpath("/html/body/header/div[2]/div/div[2]/form/div/div[1]/input").send_keys(i)
    driver.find_element_by_xpath("/html/body/header/div[2]/div/div[2]/form/div/div[2]/button").click()        
    driver.find_element_by_id("cvt-btn").click()
修复方案

错误原因

报错核心是点击转换按钮时提交的参数无效,常见触发场景有三种:

  1. 点击操作执行过快,页面还未完成链接解析,转换按钮绑定的参数未初始化完成
  2. Selenium的自动化特征被网站反爬策略识别,请求被拦截
  3. 多次循环输入时输入框有历史内容残留,导致提交的链接格式异常

具体修改点

  1. 新增Selenium反爬配置,隐藏自动化特征,初始化浏览器选项时添加以下代码:
option.add_argument("--disable-blink-features=AutomationControlled")
option.add_experimental_option("excludeSwitches", ["enable-automation"])
option.add_experimental_option("useAutomationExtension", False)
  1. 替换原有隐式等待为显式等待,确保链接解析完成后再点击转换按钮,同时每次输入新链接前先清空输入框:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 循环逻辑修改为以下内容
wait = WebDriverWait(driver, 10)
input_xpath = "/html/body/header/div[2]/div/div[2]/form/div/div[1]/input"
search_btn_xpath = "/html/body/header/div[2]/div/div[2]/form/div/div[2]/button"
for i in songs:
    # 清空输入框再输入链接
    input_ele = wait.until(EC.presence_of_element_located((By.XPATH, input_xpath)))
    input_ele.clear()
    input_ele.send_keys(i)
    # 点击搜索
    wait.until(EC.element_to_be_clickable((By.XPATH, search_btn_xpath))).click()
    # 等待转换按钮可点击后再执行点击
    cvt_btn = wait.until(EC.element_to_be_clickable((By.ID, "cvt-btn")))
    # 用JS点击避免元素交互限制
    driver.execute_script("arguments[0].click();", cvt_btn)
    # 单次转换完成后可以加几秒等待,避免请求频率过高被拦截
    time.sleep(3)
  1. 原有链接去重逻辑存在缺陷,只要最后一个存储的链接和当前链接不同就会判定为不重复,可以直接用set简化去重:
songs = []
for lnk in lnks:
    link = lnk.get_attribute("href")
    if link and "FJJlmdeL71S&index=2" in link:
        songs.append(link)
# 直接去重
songs = list(set(songs))

内容的提问来源于stack exchange,提问作者Aloof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:06:03