Selenium操作Ember.js单页应用的元素定位与点击问题
Selenium点击Ember.js单页应用元素问题解决记录
问题背景
刚入门Python开发网页爬虫,在使用Selenium点击目标页面特定元素时遇到障碍:目标网站基于Ember.js构建,属于单页应用(SPA),操作时持续抛出NoSuchElementException错误。由于目标元素的父元素关键标识会动态变化,只能通过子元素(img标签)定位其父元素,且该XPATH在页面中验证可找到对应元素,但代码执行时始终失败。
初始尝试代码
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time PATH = r'C:\Users\dme03\Desktop\desktop\webdrivers\chromedriver_win32\chromedriver.exe' driver = webdriver.Chrome(PATH) driver.get('https://thedailyrecord.com/reader-rankings-interface/') time.sleep(15) mim = driver.find_element(By.XPATH, '//img[@src="//media.secondstreetapp.com/1973100?width=370&height=180&cropmode=Fill&anchor=Center"]/parent::div') mim.click
排查过程
- 尝试使用显式等待替代固定休眠,但出现超时错误:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//img[@src="//media.secondstreetapp.com/1973100?width=370&height=180&cropmode=Fill&anchor=Center"]/parent::div')))
- 发现元素位于iframe内,调整代码切换到iframe后仍存在点击问题,甚至不确定是否该元素负责跳转:
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, '//iframe[@src="https://embed-882706.secondstreetapp.com/embed/ae709978-d6d1-499e-9f5e-136cc36eab1b/"]'))) mim = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//img[@src="//media.secondstreetapp.com/1973100?width=370&height=180&cropmode=Fill&anchor=Center"]/parent::div'))) mim.click
问题解决
最终调整后代码可正常运行,问题已解决。
内容的提问来源于stack exchange,提问作者scuffed_rayven
相关产品推荐
相关产品推荐

