5

次のように、セレンを使用してサイトにログインする作業スクリプトがあります。

script.py

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(1024, 768))
display.start()

browser = webdriver.Firefox()
actions = webdriver.ActionChains(browser)
browser.get('some_url_I_need')
content = browser.find_element_by_id('content') # Error on this line

次の方法でFirefoxをインストールした場所 から、 Amazon ubuntuボックスでそのスクリプトを実行します。sshsudo apt-get install firefox

私が得るエラーは次のとおりです。

selenium.common.exceptions.NoSuchElementException: メッセージ: u'要素が見つかりません: {"method":"id","selector":"content"}'

別のubuntuボックスでも同じスクリプトを実行するとssh、問題なく実行され、エラーは発生しませんが、そのボックスにfirefoxがどのようにインストールされたか、そのエラーの原因がわかりません。関連するFirefoxのインストールと、それを適切にインストールしてpyvirtualdisplayおよびseleniumで使用する方法はありますか?

4

2 に答える 2

11

Web サイトに動的なコンテンツがある場合は、必要な要素を取得できるまでしばらく待つ必要があります。次のコード例を試してください。

構成の確認

  • pyvirtualdisplaylikexvfbとのバックエンドをインストールしましたxephyrか? そうでない場合は、

    試す:sudo apt-get install xvfb xserver-xephyr

最初の試み:シンプルなtime.sleep()

import time
from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(1024, 768))
display.start()

browser = webdriver.Firefox()
actions = webdriver.ActionChains(browser)
browser.get('some_url_I_need')
time.sleep(5) # sleep for 5 seconds
content = browser.find_element_by_id('content') # Error on this line

2 回目の試行:browser.implicitly_wait(30) Selenium Web ドライバーに追加します。

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(1024, 768))
display.start()

browser = webdriver.Firefox()
browser.implicitly_wait(30) # seconds
actions = webdriver.ActionChains(browser)
browser.get('some_url_I_need')
content = browser.find_element_by_id('content') # Error on this line
于 2013-12-10T16:31:38.090 に答える