我有一个工作脚本,使用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使用?
如果在网站上有一些动态的内容,你需要等待一段时间,直到你可以找回想要的元素。 尝试以下代码示例:
检查配置
你有没有安装像xvfb
和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
第二次尝试:将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()