Запуск Selenium на EC2 работает на сервере, но не из браузера - PullRequest
1 голос
/ 05 мая 2020

TL; DR;

Python Selenium с использованием ChromeDriver, установленного на экземпляре EC2, не работает, когда скрипт вызывается из браузера, но работает, когда тот же скрипт вызывается с сервера. Как исправить?


Привет, ребята,

Я установил Python 3.6, Selenium, ChromeDriver и Google Chrome на свой AWS экземпляр EC2. Я также включил HTTP / 2 и дал разрешения ChromeDriver.

У меня есть тестовый Python скрипт, назовем его test.py.

#!/usr/bin/env python

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.headless = True
driver = webdriver.Chrome('/usr/bin/chromedriver', options=options)
driver.get("https://www.youtube.com/")
element_text = driver.find_element_by_id("title").text
print(element_text)

В терминале я могу просто запустите этот сценарий с помощью:

python3 /var/app/current/scripts/test.py

, и он работает без проблем.

Однако, если я попытаюсь запустить тот же сценарий из браузера (обратите внимание, что URL-адрес HTTPS), Я получаю следующую ошибку:

[mpm_event:notice] AH00493: SIGUSR1 received.  Doing graceful restart
[http2:warn] AH02951: mod_ssl does not seem to be enabled
[lbmethod_heartbeat:notice] AH02282: No slotmem from mod_heartmonitor
[mpm_event:notice] AH00489: Apache/2.4.41 (Amazon) configured -- resuming normal operations
[core:notice] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[mpm_event:warn] AH00488: long lost child came home!
Traceback (most recent call last):
  File "/var/app/current/scripts/test.py", line 3, in <module>
    from selenium import webdriver
ModuleNotFoundError: No module named 'selenium'

с указанием, что нет модуля с именем 'selenium'.

Обратите внимание, что я вызываю его из браузера, используя PHP:

<code>$output=shell_exec('python3 /var/app/current/scripts/test.py');
echo "<pre>$output
";

Я также знаю, что PHP работает, потому что если я изменю test.py на просто:

import datetime from datetime
print(datetime.now())

, он напечатает дату и время.

Так что, похоже, проблема именно с Selenium, но только в браузере.

Кто-нибудь знает, что это может быть?

Я всем благодарен вашей помощи / комментариев!

Большое спасибо :)

Брэд

РЕДАКТИРОВАТЬ

С тех пор я изменил сценарий на:

sudo PYTHONUSERBASE=/home/ec2-user/.local python3 /var/app/current/scripts/test.py

и теперь получаю немного другую ошибку:

sudo: no tty present and no askpass program specified

Думаю, я мне нужно создать виртуальную среду, а затем использовать ее, когда я снова вызываю скрипт.

...