如何使用Firefox ESR使Selenium Python脚本在树莓派3B +中运行?

时间:2019-03-14 12:23:55

标签: python linux selenium raspberry-pi raspbian

因此,我有一个 Raspberry Pi 3B + ,它具有 Python版本3.5.3 和一些Python脚本。首先是管理网址的Flask服务器。第二个必须在文件夹名称“ templates”中收集每个html文档的名称,并使用由“ localhost:8000 / the_client_name / the_doc_name”创建的URL打开 Firefox ESR 浏览器(在全屏模式下)。 。然后,它会等待几秒钟,并在同一选项卡中打开下一个URL。树莓派将通过HDMI连接到电视,并将复制带有信息,建议和类似内容的html文档。问题在于最后一个脚本使用了 Selenium ,而我无法使其正常工作。

同时粘贴两个罪行:

这是烧瓶服务器。我首先运行它并使其正常工作:

from flask import Flask
from flask import render_template


app = Flask(__name__) 


@app.route('/<emp>/<temp>')
def index(emp, temp):

    return render_template(temp, name=emp)

if __name__ == '__main__':
    app.run(debug= True, port=8000)

第二个是硒,它不起作用:

import os
from time import sleep
from selenium import webdriver

if __name__ == '__main__':
    docs = [doc.name for doc in os.scandir(path='./templates') if doc.is_file() and doc.name.endswith('.html')]
    emp = 'BUSSINES NAME'
    driver = webdriver.Firefox()
    driver.fullscreen_window()
    for doc in docs:
        driver.get('localhost:8000/{}/{}'.format(emp, doc))
        sleep(10)

我尝试了这些:

apt-get install firefox-esr
pip3 install selenium

它安装了硒版本3.141.0。

然后我从https://github.com/mozilla/geckodriver/releases下载了32位的firefox驱动程序的最新版本(v0.24.0):geckodriver-v0.24.0-linux32.tar.gz。我将其解压缩,并使用命令sudo cp geckodriver /usr/bin/将geckodriver文件放入Python3路径。当我尝试运行Selenium脚本时,出现以下错误:OSError: [Errno 8] Exec format error

然后,经过一番研究,我尝试安装一些东西:

sudo apt-get install xvfb
sudo pip install PyVirtualDisplay
sudo pip install xvfbwrapper

我运行此密码只是为了尝试:

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(1024, 768))
display.start()

driver = webdriver.Firefox()
driver.get('http://raspberrypi.stackexchange.com/')
driver.quit()

display.stop()

但是我遇到了相同的错误:OSError: [Errno 8] Exec format error

我删除了xvfb并卸载了PyVirtualDisplay和xvfbwrapper。

试图使用其他浏览器管理问题。由于 Chromiun 已在Raspbian中安装,因此我尝试了一下,但无法找到Webdriver。

最后,我改变了策略。我使用webbrowser编写了一个脚本,由于它似乎在不同的选项卡或窗口中打开URL(我尝试使用Chromiun和Firefox,却从未在同一选项卡中打开URL),所以我安装了一个窗口控制器:{{1 }}。

这是脚本:

sudo apt-get wmctrl

它奏效了,我的意思是,它做得很差。在上一个窗口浏览器中打开一个URL,然后在上一个窗口关闭后在另一个新窗口中打开下一个URL。问题是您必须手动设置全屏模式,然后import os import time import webbrowser if __name__ == '__main__': docs = [doc.name for doc in os.scandir(path='./templates') if doc.is_file() and doc.name.endswith('.html')] emp = 'BUSSINES NAME' firefox = webbrowser.get('firefox') i = 0 for doc in docs: print(doc) firefox.open('localhost:8000/{}/{}'.format(emp, doc), new=0) time.sleep(6) if i != 0: os.system('wmctrl -c Mozilla Firefox') i += 1 将无法再关闭窗口。所以实际上它没有用。

我不知道该怎么办。我想使用硒,因为它非常适合proyecto。任何人都知道如何使用受支持的浏览器之一使其在raspberry pi 3B +中工作。

注意: Raspbian GNU / Linux 9.8(拉伸) 注意2:这个问题与之前提出的问题有所不同,因为它与Raspberry Pi有关,不是MAC OS

1 个答案:

答案 0 :(得分:2)

OSError: [Errno 8] Exec format errorgeckodriver-v0.24.0-linux32.tar.gz

您要运行的二进制文件用于i386(32位Intel),而RPi具有ARM CPU。如果可以,请尝试geckodriver-v0.23.0-arm7hf.tar.gz,否则可能需要从源代码进行构建。