проблема phantomjs на Mac с ноутбуком Jupyter - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь поэкспериментировать с кодом, который я нашел в репозитории

https://github.com/AlbanyCompSci/aeries-api

, чтобы помочь мне войти в этот портал классов, который называется aeries, и вытащить моих детей из старшей школы.оценки.Но я продолжаю получать ошибки, связанные с «фантомами».Также до того, как было выдано сообщение о том, что хром должен быть безголовым.

У меня есть несколько примеров ниже, где я загружаю модуль из локального каталога, и я добавил некоторый код, чтобы попытаться устранить ошибки.Я запускаю его на Mac в ноутбуке Jupyter с Python 3.6.Любые советы приветствуются.

Код:

import pandas as pd
import numpy as np
import Main as m
import Gradebooks as Gb
import GradebookDetails as GD
import Assignments as Ag
import AeriesSession as Ar


# below added to try to resolve phantomjs errors

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()

options.add_argument('headless')

driver = webdriver.PhantomJS(executable_path='/Users/username/Desktop/Stuff/Aeries/api_version/phantomjs-2.1.1-macosx/bin/phantomjs.exe')

Предупреждение:

/Users/username/anaconda/envs/py36/lib/python3.6/site-packages/selenium/webdriver/phantomjs/webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
  warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '

Ошибка:

---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
~/anaconda/envs/py36/lib/python3.6/site-packages/selenium/webdriver/common/service.py in start(self)
     75                                             stderr=self.log_file,
---> 76                                             stdin=PIPE)
     77         except TypeError:

~/anaconda/envs/py36/lib/python3.6/subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors)
    708                                 errread, errwrite,
--> 709                                 restore_signals, start_new_session)
    710         except:

~/anaconda/envs/py36/lib/python3.6/subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session)
   1343                             err_msg += ': ' + repr(err_filename)
-> 1344                     raise child_exception_type(errno_num, err_msg, err_filename)
   1345                 raise child_exception_type(err_msg)

FileNotFoundError: [Errno 2] No such file or directory: '/Users/username/Desktop/Stuff/Aeries/api_version/phantomjs-2.1.1-macosx/bin/phantomjs.exe': '/Users/username/Desktop/Stuff/Aeries/api_version/phantomjs-2.1.1-macosx/bin/phantomjs.exe'

During handling of the above exception, another exception occurred:

WebDriverException                        Traceback (most recent call last)
<ipython-input-1-653e61cc9221> in <module>()
     14 options.add_argument('headless')
     15 
---> 16 driver = webdriver.PhantomJS(executable_path='/Users/username/Desktop/Stuff/Aeries/api_version/phantomjs-2.1.1-macosx/bin/phantomjs.exe')

~/anaconda/envs/py36/lib/python3.6/site-packages/selenium/webdriver/phantomjs/webdriver.py in __init__(self, executable_path, port, desired_capabilities, service_args, service_log_path)
     54             service_args=service_args,
     55             log_path=service_log_path)
---> 56         self.service.start()
     57 
     58         try:

~/anaconda/envs/py36/lib/python3.6/site-packages/selenium/webdriver/common/service.py in start(self)
     81                 raise WebDriverException(
     82                     "'%s' executable needs to be in PATH. %s" % (
---> 83                         os.path.basename(self.path), self.start_error_message)
     84                 )
     85             elif err.errno == errno.EACCES:

WebDriverException: Message: 'phantomjs.exe' executable needs to be in PATH.

Обновление:

код:

import pandas as pd
import numpy as np
import Main as m
import Gradebooks as Gb
import GradebookDetails as GD
import Assignments as Ag
import AeriesSession as Ar
import os

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()

options.add_argument('headless')


driver = webdriver.Chrome(executable_path=os.path.abspath('/Users/username/Desktop/Stuff/Aeries/api_version/chromedriver'), chrome_options=chrome_options) 

driver.set_window_size(1120, 550) 
driver.get("duckduckgo.com/") 
driver.find_element_by_id('search_form_input_homepage').send_keys('realpython') 
driver.find_element_by_id('search_button_homepage').click() 
print(driver.current_url)
driver.quit()

Ошибка:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-6-48f57c808807> in <module>()
     17 #downlod Chrome driver.exe
     18 
---> 19 driver = webdriver.Chrome(executable_path=os.path.abspath('/Users/username/Desktop/Stuff/Aeries/api_version/chromedriver'), chrome_options=chrome_options)
     20 
     21 driver.set_window_size(1120, 550)

NameError: name 'chrome_options' is not defined

1 Ответ

0 голосов
/ 11 октября 2018

Это сообщение об ошибке ...

WebDriverException: Message: 'phantomjs.exe' executable needs to be in PATH.

... означает, что phantomjs.exe не был найден в указанном месте.

Кажется, чтонемного запутайтесь в следующем:

  • Браузер PhantomJS сам по себе является автономным веб-браузером с поддержкой JavaScript, который может работать на Windows , macOS , Linux и FreeBSD .Таким образом, вам не нужно явно передавать аргумент headles , и вы можете удалить его.
  • Вы не упоминали о базовой операционной системе .
    • Если вы используете 64-битную ОС Linux , вам необходимо загрузить phantomjs-2.1.1-linux-x86_64.tar.bz2 из Скачать PhantomJS , извлечь двоичный файл и, указав абсолютный путь phantomjs двоичный файл, который необходимо удалить часть расширения (т. Е. .exe)
    • Если вы используете 32-битную ОС Linux , вам нужно загрузить phantomjs-2.1.1-linux-i686.tar.bz2 из Загрузите PhantomJS , извлеките двоичный файл и, упоминая об абсолютном пути двоичного файла phantomjs , необходимо удалить часть расширения (т. Е. .exe)
    • Если вына Mac OS X вам нужно загрузить phantomjs-2.1.1-macosx.zip с Скачать PhantomJS , извлечь двоичный файл и, в то же время, упомянуть абсолютный путь к необходимому бинарному файлу phantomjs чтобы удалить часть расширения (т.е. .exe)
    • Если вы используете ОС Windows , вам необходимо загрузить phantomjs-2.1.1-linux-x86_64.tar.bz2 с Загрузить PhantomJS , распаковатьбинарный и при упоминании пути фантомов двоичный файл, вам необходимо указать абсолютный путь, включая расширение (например, phantomjs.exe)
  • Хотя вы наблюдаете уведомление об устаревании , но поддержкавсе еще там.Таким образом, на данный момент вы можете игнорировать ошибку:

    C:\Python\lib\site-packages\selenium\webdriver\phantomjs\webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
      warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
    
  • Вкл. Windows8 Система вот рабочий код:

    from selenium import webdriver
    
    driver = webdriver.PhantomJS(executable_path=r'C:\\Utility\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
    driver.get('https://www.google.com/')
    print(driver.title)
    driver.quit()
    
  • Консольный вывод:

    C:\Python\lib\site-packages\selenium\webdriver\phantomjs\webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
      warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
    Google
    
...