Seleniun Python未在docker中运行



我有一个硒解析器,需要在docker中运行。当在本地机器上运行时,脚本完全正常工作。当在容器中运行时,感觉硒不起作用,当搜索任何元素时,我会得到一个错误,即找不到元素。因此,我得出结论,selenium不在docker中运行,或者它不能与chrome浏览器集成。我试着在容器中安装chrome浏览器和chrome驱动程序。尝试使用在另一个容器中运行的远程驱动程序。结果总是一样的。最高优先级是在不使用远程驱动程序的情况下运行。期待您的建议,谢谢大家!

我的Dockerfile:

FROM python:3.10-slim-buster
RUN mkdir -p /usr/src/app/
WORKDIR /usr/src/app/
COPY . /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
RUN  apt-get update 
&& apt-get install -y wget 
&& apt-get install -y gnupg2 
&& apt-get install -y curl 
&& rm -rf /var/lib/apt/lists/*
# install google chrome
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
RUN apt-get -y update
RUN apt-get install -y google-chrome-stable
# install chromedriver
RUN apt-get install -yqq unzip
RUN wget -O /tmp/chromedriver.zip http://chromedriver.storage.googleapis.com/`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`/chromedriver_linux64.zip
RUN unzip /tmp/chromedriver.zip chromedriver -d /usr/src/app/chromedriver/

CMD python3 ./script.py

我的Python脚本:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
service = Service(r'chromedriver/chromedriver')
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
# webdriver mode
options.add_argument('--disable-blink-features=AutomationControlled')
# user-agent
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/103.0.0.0 Safari/537.36")
options.add_argument('--window-size=1420,1080')
# headless mode
options.add_argument('--headless')
options.add_argument('--disable-gpu')
# incognito mode
options.add_argument("--incognito")
options.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = webdriver.Chrome(
service=service,
options=options
)

不知道Selenium的用例和实际错误,但基于Dockerfile和Python脚本,我尝试运行Selenium Getting Started示例。

我刚刚在你的脚本中添加了这两行:

driver.get("http://www.python.org")
print("Python" in driver.title)

在第一次运行中,我遇到了这个错误:

Traceback (most recent call last):
File "/usr/src/app/script.py", line 29, in <module>
driver.get("http://www.python.org")
File "/usr/local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 447, in get
self.execute(Command.GET, {'url': url})
File "/usr/local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 435, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 247, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: session deleted because of page crash
from tab crashed
(Session info: headless chrome=103.0.5060.134)
Stacktrace:

因此,基于这个答案,我通过声明以下参数来解决问题:options.add_argument("--disable-dev-shm-usage")

然后剧本如预期的那样发挥了作用。

Docker run --shm-size=1gb image_name

main.py文件或您的文件中的色度选项中,您可以禁用shm-usage

谷歌搜索。

基本上,当硒和铬一起运行时,由于shm的体积小,它失败了。

相关内容

  • 没有找到相关文章

最新更新