2017-01-19 12 views
2

EDIT:これは問題自体を解決したとして受け入れられました。Python Selenium - ElementNotVisibleException

私は実際に私がElementNotVisibleExceptionエラーを得る非常に最後の行にデータに興味を持っていないですかセレン作品(理解するために、次のWebページlink からデータをつかむしようとしています。次のように私のコードが見えます:

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

何のコードが行うことになっている:

  • クリックして "1" 上の表の "Spieltagsübersicht"
  • 最初の試合では "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"が常に私に見えるので、私はちょっと困惑しています。これさえ可能です。(今私は.is_displayedしようと、私はFALSE取得EDIT)しかし、どのように私はそれが表示され得るか)

?teamstats.is_visibleが利用可能である「場合、私は試してみました。しかし、それはないです が。。。?このため、私はセレンがある代替案を検討し、ウェブサイトのこの種のために最良の選択である場合、コード
  • を向上させるために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にあるということです。だから、これがどのようにPythonで動作するのか理解していない(もしも...)。 – FredMaster

    +0

    ところで、それはJavaですが、そこにリストされている「ElementNotVisibleException」のもっとも一般的な理由をチェックして、あなたのものがどれであるかを確認してください。 – Arman

    +0

    私はis_displayedを試みましたが、私は応答として "FALSE"を取得します。だからこそありがとう。しかし、それを修正する方法はまだ分かりません。 – 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": "' unsafe-eval 'が次のコンテンツセキュリティポリシーディレクティブで許可されたスクリプトソースではないため、JavaScriptとして文字列を評価することを拒否されました:.. ' – FredMaster

    +0

    更新された回答を確認 – Andersson

    +0

    アンダーソンさん、お返事ありがとうございます.2番目の解決策は最初にはうまくいかなかったのですが、Chromeを使用してそのサイトがteamstatsボタンをカバーするクッキーバナーを開くのを見ました。私がバナーを削除した場合、それはまだ動作しません。私はすべてのステップでいくつかのスクリーンショット(driver.save_screenshot)を取り、マッチデーへのリンクが続いていないことを認識しました。ファントムで動作していないのですか?ありがとう! – FredMaster