selenium与pyvirtualdisplay无法find元素

我有一个工作脚本,使用selenium这样login到一个网站:

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 

亚马逊ubuntu盒子上运行该脚本通过ssh在我安装firefox的方式如下: sudo apt-get install firefox

我得到的错误是:

selenium.common.exceptions.NoSuchElementException:消息:u'无法定位元素:{“method”:“id”,“selector”:“content”}'

如果我通过ssh在另一个ubuntu盒子上运行相同的脚本,它运行良好,没有错误,但我不知道如何在该框上安装firefox,可能是这个错误的原因。 是相关的Firefox安装和如何正确安装它与pyvirtualdisplay和selenium使用?

如果在网站上有一些动态的内容,你需要等待一段时间,直到你可以找回想要的元素。 尝试以下代码示例:

检查配置

  • 你有没有安装像xvfbxephyr的后端? 如果不,

    试试: 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 

第二次尝试:browser.implicitly_wait(30)添加到您的seleniumium webdriver。

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