如何在Selenium与Python中通过type定位HTML元素
解决Selenium通过HTML type属性定位input元素的问题
首先,你遇到的NoSuchElementException原因很明确:find_element_by_partial_link_text这个定位方法只适用于定位<a>标签的链接文本,而你的目标元素是<input>标签,完全不匹配,所以找不到元素是必然的。
要通过type属性定位这两个input元素,有几种可靠的方法,下面逐一说明并给出完整的修正代码:
方法1:使用XPath定位
XPath可以直接通过元素的属性进行定位,针对你的场景:
- 定位type为
file的input://input[@type='file'] - 定位type为
submit的input://input[@type='submit'](HTML属性不区分大小写,XPath默认区分,也可以用小写submit匹配)
方法2:使用CSS选择器定位
CSS选择器语法更简洁,也是常用的定位方式:
- 定位type为
file的input:input[type='file'] - 定位type为
submit的input:input[type='submit']
修正后的完整代码
下面是结合规范定位方式的完整代码,同时修正了你上传文件的错误(send_keys需要传入本地文件的完整路径,而不是"test"):
from selenium import webdriver from selenium.webdriver.common.by import By # 引入By类,更规范的定位方式 # 创建Chrome会话 driver = webdriver.Chrome() driver.maximize_window() # 加载目标页面 driver.get("<<MY PAGE TO LOAD>>") driver.implicitly_wait(5) # 定位file输入框并上传文件(用XPath示例) upload_field = driver.find_element(By.XPATH, "//input[@type='file']") # 替换成你本地测试文件的完整路径,比如C:/Users/TEST/Desktop/test.txt upload_field.send_keys("C:/Users/TEST/Desktop/test.txt") # 定位submit按钮并点击 submit_btn = driver.find_element(By.XPATH, "//input[@type='submit']") submit_btn.click() # 也可以用CSS选择器的写法: # upload_field = driver.find_element(By.CSS_SELECTOR, "input[type='file']") # submit_btn = driver.find_element(By.CSS_SELECTOR, "input[type='submit']") # 最后关闭浏览器会话 driver.quit()
额外注意事项
- 你的Selenium版本是3.8.1,既支持旧的
find_element_by_*方法,也推荐使用find_element(By.XXX, "selector")的方式,后者更符合后续版本的规范。 - 上传文件时,
send_keys不需要手动点击输入框,直接传入文件完整路径即可,Selenium会自动处理文件上传逻辑。 - 如果页面存在多个同type的input元素,可以结合其他属性(比如
name)精准定位,例如//input[@name='filePath' and @type='file'],避免定位错误。
内容的提问来源于stack exchange,提问作者Code_Sipra
相关产品推荐
相关产品推荐

