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

Python Selenium无法定位多个html标签后的元素问题求助

Troubleshooting Multiple <html> Tags in Selenium Element Locating

Hey there! I totally get how head-scratching this must be when you're new to Selenium and still wrapping your head around HTML norms. Let's break this down and fix your issue step by step.

First, you're right about standard HTML rules: a valid document should only have one root <html> element. But some poorly coded websites do violate this, and browsers will still try to parse them (even if it's not "correct"). The problem here is that Selenium's default find_element calls look through the main document context, which might not be picking up elements inside those extra <html> tags unless you explicitly target them.

Here are a few solutions you can try:

1. Locate the specific <html> element first, then search within it

You can grab all <html> elements in the DOM, then target the one that contains the elements you need. For example, if your desired element is inside the second <html> tag:

from selenium.webdriver.common.by import By

# Get all <html> elements in the page
all_html_elements = driver.find_elements(By.TAG_NAME, "html")

# Target the second <html> element (index starts at 0, so [1] is the second one)
target_html = all_html_elements[1]

# Now find your element *within* this specific <html> context
desired_element = target_html.find_element(By.ID, "your-element-id")
desired_element.click()

2. Use XPath to directly target elements inside the non-root <html>

XPath lets you index elements, so you can point straight to elements inside the second or third <html> tag without first grabbing the parent element:

# For an element with ID 'your-element-id' inside the second <html>
desired_element = driver.find_element(By.XPATH, "(//html)[2]//*[@id='your-element-id']")
desired_element.click()

Note: The (//html)[2] part selects the second <html> element in the DOM, then //*[@id='your-element-id'] finds the element with that ID inside it.

3. Double-check if those extra <html> tags are actually in an iframe

Sometimes it looks like there are multiple <html> tags, but they're actually inside nested iframes. If the above methods don't work, verify if the elements are inside an iframe:

# Switch to the iframe first (you might need to locate it by ID, name, or other attributes)
driver.switch_to.frame("iframe-id-or-name")

# Now try locating your element
desired_element = driver.find_element(By.ID, "your-element-id")
desired_element.click()

# Remember to switch back to the main content when done
driver.switch_to.default_content()

A quick tip: You can use your browser's DevTools (F12) to inspect the DOM structure and confirm exactly where those extra <html> tags are nested—this will help you pick the right approach faster.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:12:31