selenium/standalone-chrome에서 headless로 원격으로 연결하고 다운로드하고 싶습니다.
5394 단어 셀레늄루비Railsselenium-webdriver
관련도
selenium/standalone-chrome
이런 느낌으로 연결되어 있는 경우, chrome에 다운로드시켜도 조작하고 있는 ruby측에는 파일이 다운로드되는 것은 아니다(다운로드되더라도 selenium/standalone-chrome의 컨테이너측에 들어간다).
해결 방법
볼륨 사용
예
env에 패스를 써 두는 것으로, docker-compose.yml, ruby측( ENV["CHROME_DOWNLOAD_DIR"]
)에서 같은 값을 참조할 수 있다.
.envCHROME_DOWNLOAD_DIR=/chrome/downloads
docker-compose.yml# .envがあればdocker-composeはとりあえずそれを読んでymlに反映してくれる
services:
# /chrome/downloads
# を共通のボリュームにしておく
# ただそれだけだと権限の問題で書き込めないので、適当に777とかにしておく
# $ sudo chmod 777 chrome/downloads
chrome:
image: selenium/standalone-chrome
shm_size: 256m
volumes:
- .${CHROME_DOWNLOAD_DIR}:${CHROME_DOWNLOAD_DIR}
backend:
env_file:
- .env # ファイルを指定
build:
context: ./backend
working_dir: /app
volumes:
- ./backend:/app
- .${CHROME_DOWNLOAD_DIR}:/app${CHROME_DOWNLOAD_DIR}
headless chrome에서 파일을 다운로드하는 방법
일반적인 selenium 사용법이라면 확실히 download_path=
가 들어가는 하지만, 원격 라고 원래 이 모듈 가 들어 있지 않으므로, 아래와 같이 손을 가할 필요가 있다.
Selenium::WebDriver::Chrome::Driver
Selenium::WebDriver::Remote::Driver
include DriverExtensions::DownloadsFiles 예
없음
...
...
driver = Capybara::Selenium::Driver.new(
app,
browser: :remote,
desired_capabilities: caps,
url: "http://#{DOCKER_CHROME_SELENIUM_HOST_NAME}:4444/wd/hub"
)
bridge = driver.browser.send(:bridge)
bridge.http.call(
:post,
"session/#{bridge.session_id}/chromium/send_command",
cmd: "Page.setDownloadBehavior",
params: { behavior: "allow", downloadPath: ENV["CHROME_DOWNLOAD_DIR"] }
)
후에는 /app/chrome/downloads
에 파일이 들어오는 것이 ruby 측에서도 볼 수 있다.
Reference
이 문제에 관하여(selenium/standalone-chrome에서 headless로 원격으로 연결하고 다운로드하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/github0013@github/items/e6783d3434682d2fd73c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
볼륨 사용
예
env에 패스를 써 두는 것으로, docker-compose.yml, ruby측(
ENV["CHROME_DOWNLOAD_DIR"]
)에서 같은 값을 참조할 수 있다..env
CHROME_DOWNLOAD_DIR=/chrome/downloads
docker-compose.yml
# .envがあればdocker-composeはとりあえずそれを読んでymlに反映してくれる
services:
# /chrome/downloads
# を共通のボリュームにしておく
# ただそれだけだと権限の問題で書き込めないので、適当に777とかにしておく
# $ sudo chmod 777 chrome/downloads
chrome:
image: selenium/standalone-chrome
shm_size: 256m
volumes:
- .${CHROME_DOWNLOAD_DIR}:${CHROME_DOWNLOAD_DIR}
backend:
env_file:
- .env # ファイルを指定
build:
context: ./backend
working_dir: /app
volumes:
- ./backend:/app
- .${CHROME_DOWNLOAD_DIR}:/app${CHROME_DOWNLOAD_DIR}
headless chrome에서 파일을 다운로드하는 방법
일반적인 selenium 사용법이라면 확실히
download_path=
가 들어가는 하지만, 원격 라고 원래 이 모듈 가 들어 있지 않으므로, 아래와 같이 손을 가할 필요가 있다.Selenium::WebDriver::Chrome::Driver
Selenium::WebDriver::Remote::Driver
include DriverExtensions::DownloadsFiles 예
없음
...
...
driver = Capybara::Selenium::Driver.new(
app,
browser: :remote,
desired_capabilities: caps,
url: "http://#{DOCKER_CHROME_SELENIUM_HOST_NAME}:4444/wd/hub"
)
bridge = driver.browser.send(:bridge)
bridge.http.call(
:post,
"session/#{bridge.session_id}/chromium/send_command",
cmd: "Page.setDownloadBehavior",
params: { behavior: "allow", downloadPath: ENV["CHROME_DOWNLOAD_DIR"] }
)
후에는
/app/chrome/downloads
에 파일이 들어오는 것이 ruby 측에서도 볼 수 있다.
Reference
이 문제에 관하여(selenium/standalone-chrome에서 headless로 원격으로 연결하고 다운로드하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/github0013@github/items/e6783d3434682d2fd73c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)