问:Selenium NoSuchElementException(没有明确的等待或iframe)

时间:2018-10-17 01:08:29

标签: python selenium selenium-webdriver

我正在尝试用python编写代码,该代码可以通过自动浏览器(特别是Smores.tv)控制嵌入式视频播放器(jwplayer)。 (https://smores.tv/watch.php?v=j5UPZpjO&p=Yw4cOKqt)但是,当我尝试定位“暂停/播放”按钮或任何控件的元素时,它会返回nosuchelement异常。

我对此进行了一些研究,看来问题可能在于视频播放器位于iframe中,我能够找到它:

frame = driver.find_element_by_id("jwp-global-frame")
driver.switch_to.frame(frame)

不起作用,错误仍然是NoSuchElementException。可能有多个嵌入式iframe或类似的东西,但是我一直陷在这个问题上。(我也知道这个问题可能是由于页面未加载而引起的,因为我找不到明确等待的元素,所以我当前正在使用隐式等待页面加载)

frame = driver.find_element_by_id("jwp-global-frame")
driver.switch_to.frame(frame)
pausebutton = driver.find_element_by_xpath('//*[@id="player"]/div[9]/div[4]/div[2]/div[1]')
pausebutton.click()

1 个答案:

答案 0 :(得分:1)

在示例网站中,播放按钮不在任何iframe中。

因此,我尝试了不切换到iframe的情况,它对我有用。

# removed the iframe lines
pausebutton = WebDriverWait(driver, 120).until(
EC.presence_of_element_located((By.XPATH, '//[@id="player"]/div[9]/div[4]/div[2]/div[1]')))
pausebutton.click()

您还可以使用css选择器将元素找到为.jw-icon-playback