Как заставить geckodriver / chromedriver работать с selenium / python3 с помощью Raspbian - PullRequest
0 голосов
/ 10 июля 2019

Я пытался использовать Selenium 3.141.0 и Python3.6 для автоматизации входа на некоторые веб-сайты на Pi, работающем под управлением Raspbian. Pi работает под управлением Chromium и Firefox-ESR 52.9 (я не смог установить новейшую версию Firefox для установки). Поскольку я продолжал получать Exec Errors с помощью chromedriver, я перешел к Firefox.

Сценарий, по сути, запрашивает учетные данные один раз, а затем передает их в каждый URL через цикл. Я усовершенствовал его для Windows (да, я изменил эту версию кода, чтобы она была удобной для Linux). Я знаю, что Pi использует ARM и может не работать с этими драйверами (я пробовал много версий geckodriver)

Traceback (most recent call last):
  File "auto03.py", line 105, in <module>
    main_menu()
  File "auto03.py", line 46, in main_menu
    firefoxopen()
  File "auto03.py", line 79, in firefoxopen
    driver = webdriver.Firefox(geckodriver)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
    keep_alive=True)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: connection refused

В зависимости от того, что я изменяю при устранении неполадок, ошибки в основном переключаются между этими тремя:

selenium.common.exceptions.WebDriverException: Message: connection refused

или

selenium.common.exceptions.WebDriverException: Message: newsession

или

  File "auto01.py", line 4, in <module>
    driver=webdriver.Chrome('/usr/local/bin/chromedriver')
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/chrome/webdriver.py", line 73, in __init__
    self.service.start()
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/common/service.py", line 76, in start
    stdin=PIPE)
  File "/usr/lib/python3.5/subprocess.py", line 676, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.5/subprocess.py", line 1282, in _execute_child
    raise child_exception_type(errno_num, err_msg)
OSError: [Errno 8] Exec format error

Мой код:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from getpass import getpass
import time
import os
...
...
def firefoxopen():
    global driver
    driver = webdriver.Firefox('/usr/local/bin/geckodriver')
    driver.maximize_window()
...
def allboards():
    boards = [6 REDACTED VARIABLE NAMES POINT TO URLS]
    y = 1
    if y < 6:
        for x in boards:
            driver.get(x)
            driver.find_element_by_id('usernameBox').send_keys(VARIABLE FOR USERNAME)
            driver.find_element_by_id('passwordBox').send_keys(VARIABLE FOR PASSWORD)
            driver.find_element_by_id('loginButton').click()
            driver.find_element_by_link_text('Operations Center').click()
            # These lines open a new tab then switch to the tab specified by y (1st, 2nd, 3rd, etc).
            driver.execute_script("window.open('');")
            driver.switch_to.window(driver.window_handles[y])
            # This increments the variable one line up so that the next round of the loop moves to the next tab.
            y = y + 1

В идеале скрипт должен запрашивать имя пользователя / пароль, открывать Firefox, открывать первый URL-адрес, вставлять учетные данные, открывать второй URL-адрес и т. Д. И т. Д. *

...