Это мой Dockerfile:
Код: Выделить всё
FROM --platform=linux/amd64 python:3.12
WORKDIR /app
COPY . /app
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
# install google chrome
RUN apt-get update && apt-get install -y wget unzip && \
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \
apt install -y ./google-chrome-stable_current_amd64.deb && \
rm google-chrome-stable_current_amd64.deb && \
apt-get clean
CMD ["python", "scrap.py"]
Код: Выделить всё
import os
import subprocess
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
def get_driver():
chromedriver_install = ChromeDriverManager().install()
# Print the version of ChromeDriver
try:
# Use subprocess to get the ChromeDriver version
version_output = subprocess.check_output([chromedriver_install, "--version"], stderr=subprocess.STDOUT).decode('utf-8')
print(f"Installed ChromeDriver version: {version_output}")
except Exception as e:
print(f"Error fetching ChromeDriver version: {e}")
options = Options()
options.add_argument('--headless=new')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(
service=Service(chromedriver_install),
options=options
)
return driver
driver = get_driver()
# Navigate to the news website
driver.get("https://www.nytimes.com/")
# Scrape the headlines
headlines = driver.find_elements(By.CLASS_NAME, "indicate-hover")
print("i am running")
for headline in headlines:
print(headline.text)
print("i am closed")
# Close the browser
driver.quit()
Код: Выделить всё
Traceback (most recent call last):
File "/app/scrap.py", line 32, in
driver = get_driver()
^^^^^^^^^^^^
File "/app/scrap.py", line 25, in get_driver
driver = webdriver.Chrome(
^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/selenium/webdriver/chrome/webdriver.py", line 45, in __init__
super().__init__(
File "/usr/local/lib/python3.12/site-packages/selenium/webdriver/chromium/webdriver.py", line 66, in __init__
super().__init__(command_executor=executor, options=options)
File "/usr/local/lib/python3.12/site-packages/selenium/webdriver/remote/webdriver.py", line 212, in __init__
self.start_session(capabilities)
File "/usr/local/lib/python3.12/site-packages/selenium/webdriver/remote/webdriver.py", line 299, in start_session
response = self.execute(Command.NEW_SESSION, caps)["value"]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/selenium/webdriver/remote/webdriver.py", line 354, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.12/site-packages/selenium/webdriver/remote/errorhandler.py", line 229, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: disconnected: Unable to receive message from renderer
(failed to check if window was closed: disconnected: not connected to DevTools)
(Session info: chrome=129.0.6668.89)
Stacktrace:
#0 0x00400084002a
#1 0x0040005265e0
#2 0x00400050e733
#3 0x00400050e422
#4 0x00400050c493
#5 0x00400050cada
#6 0x00400050b451
#7 0x004000513a38
#8 0x00400050b19b
#9 0x00400050e0ea
#10 0x00400050c493
#11 0x00400050cada
#12 0x00400050b451
#13 0x004000501d07
#14 0x00400050b19b
#15 0x00400050aaa2
#16 0x00400050a575
#17 0x00400052880e
#18 0x0040004fb78e
#19 0x0040004fb2f6
#20 0x0040005a6ffc
#21 0x0040005a6446
#22 0x00400059a8c3
#23 0x0040005686b3
#24 0x00400056968e
#25 0x00400080aa2b
#26 0x00400080e9b1
#27 0x0040007f7225
#28 0x00400080f532
#29 0x0040007dc38f
#30 0x00400082ef28
#31 0x00400082f0f3
#32 0x00400083ee7c
#33 0x004002e41144
- Базовый контекст сборки: MAC OS M1 Sonoma 14.6. 1
- Версия Selenium: 4.25.0
- Версия Chromedriver: 129.0.6668.89
- Версия Chrome: 129.0 .6668.89
- Вывод версий chromedriver и chrome каждая соберите и запустите, чтобы убедиться, что они совпадают.
- Экспериментируйте со всеми этими дополнительными аргументами:
Код: Выделить всё
# options.add_argument("--disable-extensions")
# options.add_argument("--disable-gpu")
# options.add_argument("--disable-infobars")
# options.add_argument("--start-maximized")
# options.add_argument("--disable-notifications")
- Заходим в контейнерный терминал через Docker Desktop и вручную добавляем петлю локального хоста 127.0.0.1 в /etc/hosts
Заходим в контейнерный терминал через Docker Desktop и добавляем вручную петлю локального хоста 127.0.0.1 в /etc/hosts
code>, а затем вручную запустить python Scrap.py из этого терминала — тоже без радости - Добавление флага shm-size=2gb в мою команду запуска Docker . (На самом деле я предполагаю, что аргумент --disable-dev-shm-usage также охватывает это, но попытаться стоило)
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/790 ... ting-the-e