我有一个使用selenium登录网站的工作脚本:
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框上运行相同的脚本,它运行正常,没有错误,但我不知道firebox是如何在该框上安装的,可能是该错误的原因。是关联firefox安装以及如何正确安装它以与pyvirtualdisplay和selenium一起使用?
答案 0 :(得分:11)
如果网站上有某些动态内容,您需要等待一段时间 直到你可以检索希望的元素。尝试使用以下代码示例:
检查配置
您是否安装了pyvirtualdisplay
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)
添加到您的Selenium 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
答案 1 :(得分:0)
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()