Selenio con pyvirtualdisplay no puede localizar el elemento

Tengo una secuencia de comandos de trabajo que inicia sesión en un sitio utilizando selenium como este:

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 

ejecutando ese script en una caja de Amazon Ubuntu a través de ssh donde instalé Firefox de la siguiente manera: sudo apt-get install firefox

El error que recibo es:

selenium.common.exceptions.NoSuchElementException: Mensaje: u’No se puede encontrar el elemento: {“method”: “id”, “selector”: “content”} ‘

Si ejecuto la misma secuencia de comandos en otra caja de Ubuntu a través de ssh , se ejecuta bien, no hay error, pero no sé cómo se instaló Firefox en esa caja, cuál podría ser la causa de ese error. ¿Está relacionada la instalación de Firefox y cómo instalarla correctamente para usarla con pyvirtualdisplay y selenium?

Si hay algún contenido dynamic en el sitio web, debe esperar un tiempo hasta que pueda recuperar el elemento deseado. Trate de seguir los ejemplos de código:

Compruebe la configuración

  • ¿ pyvirtualdisplay un backend para pyvirtualdisplay como xvfb y xephyr ? Si no,

    prueba: sudo apt-get install xvfb xserver-xephyr

Primer bash: Agrega un simple 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 

Segundo bash: agregue browser.implicitly_wait(30) a su controlador web Selenium.

 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 
 from pyvirtualdisplay import Display from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import Select from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import NoAlertPresentException from selenium.webdriver.common.keys import Keys import unittest, time, re, random capabilities = DesiredCapabilities.FIREFOX.copy() capabilities['marionette'] = False #display = Display(visible=0, size=(1024, 768)) #display.start() driver = webdriver.Firefox(capabilities=capabilities) driver.implicitly_wait(20) base_url = "http://xxx.yyy.zzz.aaa/sss/sss-Login/login/main_login.php" RANDINT = random.random()*10000 verificationErrors = [] driver.get(base_url + "") username = driver.find_element_by_id("myusername") username.send_keys("xxxxxxxx") driver.implicitly_wait(20) password = driver.find_element_by_id("mypassword") #password.send_keys("xxxxzz" + Keys.ENTER) password.send_keys("xxxxzzc" ) driver.implicitly_wait(20) driver.find_element_by_xpath("//*[@id='submit']").click() # Click on category link driver.find_element_by_xpath("//*[@id='stylefour']/ul/li[3]/a").click() driver.find_element_by_xpath("//*[@id='stylefour']/ul/li[1]/a").click() driver.find_element_by_xpath("//*[@id='stylefour']/ul[2]/li[4]/a").click # Click on sub-category link driver.find_element_by_xpath("//*[@id='top']/body/div/div[2]/div[2]/div/div[2]/ul/li[4]/a/span").click() # Click on product image driver.find_element_by_xpath("//*[@id='product-collection-image-374']").click() # Click Checkout button driver.find_element_by_xpath("//*[@id='checkout-button']/span/span").click() driver.find_element_by_id("billing:firstname").clear() driver.find_element_by_id("billing:firstname").send_keys("selenium", RANDINT, "_fname") driver.find_element_by_id("billing:lastname").clear() driver.find_element_by_id("billing:lastname").send_keys("selenium", RANDINT, "_lname") # Click Place Order driver.find_element_by_xpath("//*[@id='order_submit_button']").click() driver.quit() display.stop()