Ich versuche, mit Python und Selenium /Standalone-Chrome zu arbeiten, um eine Automatisierung zum Herunterladen einer .xlsx-Datei von meiner Website zu erstellen.docker run -d -v selenium_vol:/home/myuser/Downloads -p 4444:4444 -p 7900:7900 --name download_cont --network test_net --shm-size="2g" selenium/standalone-chrome
docker run -d -v selenium_vol:/usr/src/app/download_folder --network test_net --name python_auto automation
< /code>
Ich habe festgestellt, dass der Selenium -Container, wenn die mit Selenium_vol zugeordnete Berechtigung des lokalen Dateisystemordners zugeordnet ist, die Dokumente korrekt heruntergeladen hat. Andernfalls heißt es, dass es Berechtigungen benötigt, um die Datei herunterzuladen. Um die Datei ohne Problem herunterzuladen.FROM selenium/standalone-chrome:latest
# Adding the group and the user for security reinforcement purpose
RUN sudo groupadd -o --gid 1000 myuser
RUN sudo useradd -o --uid 1000 --gid myuser --shell /bin/sh --create-home myuser
# Adding the folder in which the program will be copied and called
RUN sudo mkdir /home/myuser/Downloads
RUN sudo chown -R myuser:myuser /home/myuser/Downloads
RUN sudo chmod 777 /home/myuser/Downloads
# Changing directory
WORKDIR /home/myuser/Downloads
# Copying all the files, and changing the ownership to the new user, myuser
COPY --chown=myuser:myuser . .
# Changing the user to the one we created before, with limited access to the machine: myuser
USER myuser
< /code>
Aber wenn ich mit dem folgenden Python -Code zum Container versuche, < /p>
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument("--disable-dev-shm-usage")
prefs = {
"download.default_directory": "/home/myuser/Downloads/",
"download.prompt_for_download": False,
"download.directory_upgrade": True,
"safebrowsing.enabled": True }
driver = webdriver.Remote(command_executor="http://localhost:4444", options=options)
try:
driver.set_page_load_timeout(120)
driver.set_script_timeout(120)
driver.implicitly_wait(120)
print(driver.session_id)
driver.command_executor._commands["send_command"] = (
"POST", '/session/' + driver.session_id + '/chromium/send_command')
params = {'cmd': 'Page.setDownloadBehavior',
'params': {'behavior': 'allow', 'downloadPath': '/home/myuser/Downloads/'}}
command_result = driver.execute("send_command", params)
my_function(driver)
driver.quit()
except Exception as e:
print(e)
driver.quit()
< /code>
Was ich als Antwort erhalten, ist < /p>
Traceback (most recent call last):
File "Drive:\my_automation_test\main.py", line 149, in
driver = webdriver.Remote(command_executor="http://localhost:4444", options=options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "Drive:\my_automation_test\.venv\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 208, in __init__
self.start_session(capabilities)
File "Drive:\my_automation_test\.venv\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 292, in start_session
response = self.execute(Command.NEW_SESSION, caps)["value"]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "Drive:\my_automation_test\.venv\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 347, in execute
self.error_handler.check_response(response)
File "Drive:\my_automation_test\.venv\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 229, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.SessionNotCreatedException: Message: Could not start a new session. No nodes support the capabilities in the request
Host info: host: 'host-id', ip: 'xxx.xxx.xxx.xxx'
Build info: version: 'ver', revision: 'revision-id'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: 'os-version', java.version: '17.0.12'
Driver info: driver.version: unknown
Stacktrace:
at org.openqa.selenium.grid.distributor.local.LocalDistributor$NewSessionRunnable.checkMatchingSlot (LocalDistributor.java:816)
at org.openqa.selenium.grid.distributor.local.LocalDistributor$NewSessionRunnable.run (LocalDistributor.java:798)
at org.openqa.selenium.concurrent.GuardedRunnable.lambda$guard$0 (GuardedRunnable.java:35)
at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:539)
at java.util.concurrent.FutureTask.runAndReset (FutureTask.java:305)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run (ScheduledThreadPoolExecutor.java:305)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1136)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:635)
at java.lang.Thread.run (Thread.java:840)
Process finished with exit code 1
< /code>
Ich habe versucht, die Standardoptionen (mit allen obigen Code kommentiert) zu verbinden, aber nichts ändert sich. Ich habe versucht, im Internet nach Best Practices zu suchen, um mit einem anderen Benutzer als Seluser eigenständig auszuführen, aber ich habe nichts gefunden, was mir helfen kann. Ich habe auch versucht, den Standard/Home/Seluser/Downloads zu konfigurieren, aber das Ergebnis ist immer noch das gleiche.
Wie kann ich vorgehen? Es gibt eine korrekte Möglichkeit, einen Seleniumbehälter mit einem anderen Benutzer auszuführen, oder sollte ich eine andere Lösung erstellen?
Danke!
Wie kann ich einen Selenium-Standalone-Chrome-Container mit einem anderen Benutzer als Seluser richtig ausführen? ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post