PermissionError: [Errno 1] Операция не разрешена при использовании Selenium с Pythonista на iOS - PullRequest
0 голосов
/ 09 мая 2018

Я хочу создать программу на pythonista, которая может управлять веб-браузером. Я знаю, что для этого лучше всего подойдет Selenium, но я попробовал его на pythonista для своего iPhone на iOS и получаю сообщение об ошибке.

Это код:

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://www.yahoo.com')

Вот ошибка:

PermissionError: [Errno 1] Operation not permitted
Traceback (most recent call last):
  File "/private/var/mobile/Containers/Shared/AppGroup/A2EBDF28-CB6C-4190-8199-7406AA3821A3/Pythonista3/Documents/selen.py", line 3, in <module>
    browser = webdriver.Chrome()
  File "/private/var/mobile/Containers/Shared/AppGroup/A2EBDF28-CB6C-4190-8199-7406AA3821A3/Pythonista3/Documents/site-packages-3/selenium/webdriver/chrome/webdriver.py", line 68, in __init__
    self.service.start()
  File "/private/var/mobile/Containers/Shared/AppGroup/A2EBDF28-CB6C-4190-8199-7406AA3821A3/Pythonista3/Documents/site-packages-3/selenium/webdriver/common/service.py", line 76, in start
    stdin=PIPE)
  File "/var/containers/Bundle/Application/24DD2A57-320E-4E21-9BE2-7C3605830DE0/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/subprocess.py", line 708, in __init__
    restore_signals, start_new_session)
  File "/var/containers/Bundle/Application/24DD2A57-320E-4E21-9BE2-7C3605830DE0/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/subprocess.py", line 1261, in _execute_child
    restore_signals, start_new_session, preexec_fn)
PermissionError: [Errno 1] Operation not permitted

1 Ответ

0 голосов
/ 10 мая 2018

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

PermissionError: [Errno 1] Operation not permitted

... означает, что ChromeDriver не смог создать требуемый новый ресурс например logfile при инициализации нового WebDriver и Веб-клиент * сеанс 1013 *.

Согласно обсуждению Pythonista - Limitations due to iOS Ниже приведены некоторые ограничения при использовании Pythonista :

  • Нет форка / exec для новых процессов.Влияет на модуль подпроцесса.
  • Из-за отсутствия разветвления нет полной очистки ресурсов процесса (памяти, потоков, файловых дескрипторов).
  • Нет доступа к файлам вне каталога приложения.
  • Нет /dev/null и другие специальные файлы.
  • Ограниченная вычислительная мощность устройств (по сравнению с обычными ПК / Mac).
  • Процесс обычно останавливается / прерывается через некоторое время.

Простой пример:

>>> import subprocess
>>> subprocess.call(["ls", "-l"])
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/private/var/mobile/Containers/Bundle/Application/8C59C68D-71BF-4CBB-90F8-373A1752DEE1/Pythonista.app/pylib/subprocess.py", line 524, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/private/var/mobile/Containers/Bundle/Application/8C59C68D-71BF-4CBB-90F8-373A1752DEE1/Pythonista.app/pylib/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/private/var/mobile/Containers/Bundle/Application/8C59C68D-71BF-4CBB-90F8-373A1752DEE1/Pythonista.app/pylib/subprocess.py", line 1205, in _execute_child
    self.pid = os.fork()
OSError: [Errno 1] Operation not permitted

Что не так в вашем сценарии использования

Возможны следующие 2 проблемы:

  • Когда вы вызываете следующую строку кода:

    browser = webdriver.Chrome()
    

    ChromeDriver пытается создать / изменить / доступ scoped_directory в файловой системе.Например, в ОС Windows :

    "chromedriverVersion": "2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73)",
    "userDataDir": "C:\\Users\\username\\AppData\\Local\\Temp\\scoped_dir5188_12717"
    

    Возможно ChromeDriver не может выполнить эту задачу / метод / функциональность.

  • Снова, когда вы вызываете следующую строку кода:

    browser = webdriver.Chrome()
    

    Согласно selenium.webdriver.chrome.webdriver ChromeDriver пытается создать logfile в файловой системе согласно конструктору следующим образом:

    class selenium.webdriver.chrome.webdriver.WebDriver(executable_path='chromedriver', port=0, options=None, service_args=None, desired_capabilities=None, service_log_path=None, chrome_options=None)
    

    Возможно ChromeDriver не может выполнить эту задачу / метод / функциональность,

По указанным выше причинам вы видите ошибку:

PermissionError: [Errno 1] Operation not permitted

Решение

В случае любого из вышеупомянутых случаев решением будет ограничение доступа / создание ресурсов в каталоге приложения * только 1106 *.

...