首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法定位元素的具有pyvirtualdisplay的Selenium

无法定位元素的具有pyvirtualdisplay的Selenium
EN

Stack Overflow用户
提问于 2013-12-10 03:16:43
回答 2查看 13.6K关注 0票数 6

我有一个使用selenium登录到站点的工作脚本,如下所示:

script.py

代码语言:javascript
复制
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

amazon 上通过ssh运行该脚本,我通过以下方式安装了火狐:

我得到的错误是:

selenium.common.exceptions.NoSuchElementException:消息:U‘’Unable to locate元素:{“方法”:“id”,“选择器”:“content”}‘

如果我也通过ssh在另一个ubuntu框上运行相同的脚本,它运行的很好,没有错误,但是我不知道这个框是如何安装的,是什么原因导致了这个错误。是与firefox安装相关的吗?如何正确地安装它,以便与pyvirtualdisplay和selenium一起使用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-10 16:31:38

如果网站上有一些动态内容,您需要等待一段时间,直到您可以检索希望元素。尝试下面的代码示例:

检查配置

  • 您是否为pyvirtualdisplay安装了后端,如xvfbxephyr?如果不是, 尝试:sudo apt-get install xvfb xserver-xephyr

第一次尝试:添加一个简单的time.sleep()

代码语言:javascript
复制
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 Add驱动程序中。

代码语言:javascript
复制
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
票数 12
EN

Stack Overflow用户

发布于 2017-10-12 18:12:17

代码语言:javascript
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20485360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档