Python中Selenium无法通过ID定位元素(已尝试XPATH)
无法定位MSG网站UFC-295表单元素问题
我尝试填写网站https://www.msg.com/ufc-295/的表单,但无论采用何种方式都无法定位到目标元素。已排查过iframe问题,确定并非该原因。
我的Python代码:
# For Browser 1 browser1 = webdriver.Chrome(options=opts, service=Service(ChromeDriverManager().install())) browser1.get("https://www.msg.com/ufc-295/") browser1.implicitly_wait(2) first_name = browser1.find_element(By.ID, "field147946152-first") last_name = browser1.find_element(By.ID, "field147946152-last") email = browser1.find_element(By.ID, "field147946153") submit = browser1.find_element(By.ID, "fsSubmitButton5363561")
表单字段的HTML代码复制后格式混乱,附上截图:
可能的解决方法:
- 延长等待时间并改用显式等待:
implicitly_wait(2)等待时长不足,页面可能未完全加载。推荐使用显式等待确保元素可见或可交互:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待名输入框可见,最长等待10秒 first_name = WebDriverWait(browser1, 10).until( EC.visibility_of_element_located((By.ID, "field147946152-first")) )
- 更换定位方式:如果元素ID是动态生成的,可尝试用name属性、CSS选择器或XPath定位。比如从截图中提取name属性,用CSS选择器
input[name='field147946152-first']定位输入框。 - 检查shadow DOM:若元素被封装在shadow DOM中,需先获取shadow root再查找内部元素。
- 确认页面动态加载:表单可能通过AJAX异步加载,可等待页面加载完成或监听网络请求确认表单资源加载完毕。
内容的提问来源于stack exchange,提问作者kian
相关产品推荐
相关产品推荐

