2016-10-27 10 views
0

私は単純なブラウザ操作を試みています。ここでは、Webサイトでユーザー名要素を見つけてログインしようとしています。私はこれを行うためにセレンとPythonを使用しています。ここに私のローカルマシンで動作する簡単なコードがあります。このコードは、コンピュータ上のブラウザを開き、正しいユーザー名ボックスに移動し、ユーザー名を入力します。私はFirefoxがポップアップする必要がないようにpyvirtualdisplayを使用してAWSのサーバー上で同じコードを展開しようとすると、 Pythonのpyvirtualdisplayとseleniumで要素が見えない

from selenium import webdriver 
browser = webdriver.Firefox() 
browser.get(my_url) 
username_element = browser.find_elements_by_name("USERNAME")[0] 
username_element.clear() 
username_element.send_keys(my_username) 

はしかし、それはもはや機能しません。

from pyvirtualdisplay import Display 
from selenium import webdriver 

display = Display(visible=0, size=(800, 600)) 
display.start() 

browser = webdriver.Firefox() 
browser.get(my_url) 
username_element = browser.find_elements_by_name("USERNAME")[0] 
username_element.clear() 
username_element.send_keys(my_username) 

要素が確実に見つけましたが、私は要素は見えないエラーを取得している:

によって確認され
selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with 

:私は上見られる様々なものを試してみた

>> username_element.is_displayed() 
False 

SOを含むSO:

  • xvfb a ND

から、これを解決する方法上の任意のアイデアをbrowser.implicitly_wait(30)

  • しようWebDriverWait(browser,30).until(EC.visibility_of_element_located((By.NAME, "USERNAME")))た回を追加すること
  • Xephyrでインストールされていますか?

  • 答えて

    1

    あなたは、画面をスクロールすることができます

    browser.execute_script("window.scrollTo(0, 600)") 
    
    +0

    これは機能しませんでした。私はまだ目に見える例外ではない。私は、ユーザー名ボックスはページの上部にあるので、スクロールの問題ではないように見えるはずです。 – plam

    +0

    あなたはスクリーンショットを撮って、 'browser.save_screenshot( 'screen.png')' –

    +0

    のページに要素がないことを確認できます。それは実際に私がそれを理解するのを助けました。画面サイズが十分に大きく設定されていなかったことがわかります。 – plam

    1

    は、スクリーンショットを取った後、それを考え出しました。画面の表示が十分に大きく設定されていなかったことがわかります。表示サイズを(1600,900)に変更すると問題が解決しました。

    関連する問題