使用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
相关产品推荐
相关产品推荐

