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

使用Python+Selenium向卡巴斯基在线扫描器上传APK被识别为URL的问题

解决卡巴斯基在线扫描器Selenium文件上传问题

我完全懂你遇到的麻烦了——直接给txt-input-01输入文件路径会被当成URL,这是因为这个输入框本来就是设计用来输入链接的,文件上传的逻辑其实藏在页面的隐藏元素里。你猜测要先点击“Attach file”的方向是对的,但不用模拟点击按钮(点击后会唤起系统文件选择框,Selenium没法直接操控这个原生框),正确的做法是直接定位到页面中隐藏的file类型input元素来完成上传。

问题核心原因

看页面的HTML结构,“Attach file”按钮只是一个触发入口,背后关联着一个被CSS隐藏的<input type="file">元素,这个元素才是真正负责接收文件路径的上传入口。而你之前操作的txt-input-01是纯文本输入框,仅支持输入URL,所以输入文件路径自然会被识别成链接格式。

修正后的代码示例

下面是调整后的Python代码,直接操作隐藏的文件上传input,这也是Selenium处理文件上传的标准方案:

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

kaspersky_base_URL = "https://virusdesk.kaspersky.com/#"
driver = webdriver.Firefox()
driver.get(kaspersky_base_URL)

file_path = "/home/user/filepath"

# 显式等待页面加载完成,定位到隐藏的file类型输入元素
file_input = WebDriverWait(driver, 30).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "input[type='file']"))
)

# 部分浏览器需要先让隐藏元素可见才能操作,用JS临时修改样式(可选,部分浏览器可跳过)
driver.execute_script("arguments[0].style.display = 'inline-block';", file_input)

# 直接给file input传入本地文件路径
file_input.send_keys(file_path)

# 等待Scan按钮变为可点击状态后,触发扫描
scan_btn = WebDriverWait(driver, 30).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "a.bt-check"))
)
scan_btn.click()

重要说明

  • 不要尝试修改txt-input-01的type属性:页面刷新后修改会失效,而且这根本不是文件上传的正确入口。
  • 用显式等待替代implicitly_wait:显式等待能精准确保元素加载完成后再操作,比全局隐式等待更可靠。
  • 直接操作隐藏file input:这是绕开系统原生文件选择框的最优方案,避免了Selenium无法操控原生对话框的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:57:47