2017-01-19 1 views
2

EDIT : 문제 자체가 해결되었으므로 대답을 수락했습니다. 나는 순서 link 는 셀레늄 작품 (실제로 나는 내가 ElementNotVisibleException 오류을받을 맨 마지막 줄에 데이터에 관심이 얼마나 이해하기 위해 다음의 웹 페이지에서 데이터를 잡기 위해 노력하고Python Selenium - ElementNotVisibleException

. 다음과 같이 내 코드가 보인다 :

  • 클릭을 "1"위 표에서 "Spieltagsübersicht"
  • 에 : 코드가 어떻게해야 무엇

    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() 
    

  • 첫 번째 게임의 경우 "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 및 FALSE 얻을.) 그러나이 표시 할 수 있습니까?이 경우조차 가능합니까?)

이를 위해

, 나는 ElementNotVisibleException 오류를 방지하는 방법을

  • 에 어떤 조언에 감사 것/코드
  • 을 개선하는 방법 셀레늄은 대안을 고려하는 것은 웹 사이트에 이런 종류의 최선의 선택 인 경우 BeautifulSoup

지원해 주셔서 감사합니다. 이것은 실제로 내 첫 번째 게시물입니다.

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

당신은 또한 아래로 페이지를 스크롤이 간단한 방법을 시도 할 수 있습니다 : 그래서 페이지의 보이지 않는 부분에있는 대상 요소로

+0

답장을 보내 주셔서 감사합니다. 나는이 게시물을 보았지만 나의 이해는 해결 방법이 javascrip에 있다는 것이다. 그래서 이것이 파이썬에서 어떻게 작동하는지 이해하지 못한다. – FredMaster

+0

그건 그렇고, Java이지만, 'ElementNotVisibleException'이 발생하는 가장 일반적인 이유가 거기에 나열되어 있는지 확인하고 어떤 것이 당신인지를 확인하십시오. – Arman

+0

is_displayed 시도하고 응답으로 "거짓"가져옵니다. 그래서 고마워. 그러나 아직도 그것을 고치는 방법을 모른다. – FredMaster

답변

0

;-) 부드러운하시기 바랍니다, 당신은 그것을 볼 수 있도록 아래로 스크롤해야 할 수도 있습니다 :

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

도움 주셔서 감사합니다. 나는 이것을 시도했다. 'WebDriverException : 메시지 : { "errorMessage": "'안전하지 않은 평가 '가 허용 된 스크립트 소스가 아니기 때문에 문자열을 JavaScript로 평가하는 것을 거부했습니다. 내용은 다음과 같습니다. ' – FredMaster

+0

업데이트 된 답변 확인 – Andersson

+0

안녕하세요, Andersson 님, 답변 해 주셔서 감사합니다. 두 번째 해결 방법은 처음에는 작동하지 않았습니다. 그런 다음 Chrome을 사용하여 사이트에서 teamstats 버튼을 덮는 쿠키 배너를 열었습니다. 팬텀에서는 여전히 작동하지 않습니다. 모든 단계에서 일부 스크린 샷 (driver.save_screenshot)을 가져 와서 성냥갑에 대한 링크가 뒤따른다는 사실을 깨달았습니다. 쿠키 배너를 피할 수있는 방법과 그 이유는 무엇입니까? 팬텀과 작동하지 않습니까? 고마워요! – FredMaster