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
Думаю, я мне нужно создать виртуальную среду, а затем использовать ее, когда я снова вызываю скрипт.