一尘不染

带有pyvirtualdisplay的selenium无法找到元素

selenium

我有一个工作脚本,可以使用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

通过以下方式在安装了Firefox的 亚马逊Ubuntu盒子 上运行该脚本sshsudo apt-get install firefox

我得到的错误是:

selenium.common.exceptions.NoSuchElementException:消息:u’无法找到元素:{“ method”:“
id”,“ selector”:“ content”}’

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


阅读 408

收藏
2020-06-26

共1个答案

一尘不染

如果网站上有一些动态内容,则需要等待一段时间才能检索到所需的元素。尝试下面的代码示例:

检查配置

  • 您是否为pyvirtualdisplaylike 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
2020-06-26