具有pyvirtualdisplay的Selenium无法定位元素

Pep*_*zza 5 python ubuntu selenium pyvirtualdisplay

我有一个使用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
Run Code Online (Sandbox Code Playgroud)

亚马逊ubuntu框上运行该脚本,通过ssh以下方式安装firefox: sudo apt-get install firefox

我得到的错误是:

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

如果我也在另一个ubuntu盒子上运行相同的脚本ssh,它运行正常,没有错误,但我不知道firefox是如何安装在该盒子上的,可能是该错误的原因.是关联firefox安装以及如何正确安装它以与pyvirtualdisplay和selenium一起使用?

Jon*_*Jon 11

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

检查配置

  • 是否安装了后端pyvirtualdisplay喜欢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
Run Code Online (Sandbox Code Playgroud)

第二次尝试:添加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
Run Code Online (Sandbox Code Playgroud)