Python Selenium - ElementNotVisibleException

时间:2017-01-19 14:01:52

标签: python selenium

编辑:接受了答案,因为它解决了问题本身。

我正在尝试从以下网页link获取数据 为了理解selenium是如何工作的(实际上我对数据不感兴趣。在最后一行我得到 ElementNotVisibleException错误。我的代码如下所示:

path = mypath
url = 'http://www.bundesliga.de/de/liga/statistik/spieltag/'

#### SCRIPT TO TEST SELENIUM 

#### (0) Load driver 
driver = webdriver.PhantomJS(path)  
driver.set_window_size(1120, 550)
driver.get(url)

#### (1) Define XPATHs
XPATH_MATCHDAY = '//*[contains(@class, "has-data")]'
XPATH_GAMES = "//*[contains(text(), 'mehr zum Spiel')]"
XPATH_TEAMSTATS = "//span[contains(text(), 'Teamstatistik')]"

### (2) Click links to Teamstats 

# Select Matchday 1
matchday = driver.find_elements_by_xpath(XPATH_MATCHDAY)[0] 
matchday.click()

# Select game one
game = driver.find_elements_by_xpath(XPATH_GAMES)[0]
game.click()

# Select teamstats tab (bottom of page)
teamstats = driver.find_elements_by_xpath(XPATH_TEAMSTATS)[0]
time.sleep(.5)
teamstats.click()

代码应该做什么:

  • 点击上表“Spieltagsübersicht”
  • 中的“1”
  • 点击第一场比赛的“mehr zum Spiel”
  • 点击页面下半部分“Teamstatistik”标签。

但是,虽然标签Teamstatistik可见,但我收到了错误消息。

我已经非常深入地阅读了关于stackoverflow的这个错误,并且还尝试了以下解决最后一行的问题。但是,我确实得到了TimeoutException。

teamstats = WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,"XPATH_TEAMSTATS")))
teamstats.click()

我已经尝试过PhantomJS和Chrome,但无法修复此问题。我有点困惑,因为我试图点击的标签“Teamstatistik”对我来说始终可见。我试过,如果“teamstats.is_visible可用。但事实并非如此。(编辑:现在我尝试了.is_displayed,我得到了一个假的。)但是我如何才能显示它?这甚至可能吗?)

为此,我会

的任何建议表示感谢
  • 如何避免ElementNotVisibleException错误/如何改进代码
  • 如果硒是这类网站的最佳选择,考虑到替代方案是BeautifulSoup

感谢您的支持!这实际上是我的第一篇文章。所以请温柔; - )

1 个答案:

答案 0 :(得分:0)

作为位于页面不可见部分的目标元素,您可能需要向下滚动才能使其可见:

teamstats = driver.find_elements_by_xpath(XPATH_TEAMSTATS)[0]
time.sleep(.5)
driver.execute_script('arguments[0].scrollIntoView()', teamstats)
teamstats.click()

您也可以尝试这种简单的方式向下滚动页面:

teamstats = driver.find_elements_by_xpath(XPATH_TEAMSTATS)[0]
time.sleep(.5)
teamstats.location_once_scrolled_into_view
teamstats.click()