我有一个工作脚本,可以使用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盒子 上运行该脚本ssh: sudo apt-get install firefox
ssh
sudo apt-get install firefox
我得到的错误是:
selenium.common.exceptions.NoSuchElementException:消息:u’无法找到元素:{“ method”:“ id”,“ selector”:“ content”}’
如果我ssh也通过另一个ubuntu框运行相同的脚本,它运行正常,没有错误,但是我不知道该框上如何安装了firefox,这可能是导致该错误的原因。是与firefox相关的安装,以及如何正确安装它与pyvirtualdisplay和selenium一起使用?
如果网站上有一些动态内容,则需要等待一段时间才能检索到所需的元素。尝试下面的代码示例:
检查配置
pyvirtualdisplay
xvfb
xephyr
尝试: sudo apt-get install xvfb xserver-xephyr
sudo apt-get install xvfb xserver-xephyr
首先尝试: 添加一个简单的time.sleep()
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。
browser.implicitly_wait(30)
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