#python #selenium-webdriver
#python #selenium-webdriver
Вопрос:
Я полный новичок в python… Я написал простой скрипт, который извлекает некоторые данные с веб-сайта и сохраняет их в текстовый файл, но после запуска скрипта он просто остается там и не «завершается». Поскольку я буду запускать его как задачу Windows, мне нужно, чтобы он закрывался сам по себе после запуска. Есть ли способ сообщить python закрыть терминал после завершения скрипта? Я искал везде, и кажется, что большинство людей пытаются сделать наоборот, оставить его открытым после запуска кода. Не уверен, имеет ли это значение, но я просто запускаю файл .py, а не в VS или PyCharm. Заранее спасибо.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from datetime import date
driver = webdriver.Chrome()
driver.get("MyURL")
time.sleep(11)
first = driver.find_element_by_xpath('/html/body/main/div[2]/div/div/div/div[2]/div[1]/div/div[2]/div[2]/div/ul/table/tbody/tr[3]/td[2]/div/span[1]')
second = driver.find_element_by_xpath('/html/body/main/div[2]/div/div/div/div[2]/div[1]/div/div[2]/div[2]/div/ul/table/tbody/tr[2]/td[2]/div/span[1]')
third = driver.find_element_by_xpath('/html/body/main/div[2]/div/div/div/div[2]/div[1]/div/div[2]/div[2]/div/ul/table/tbody/tr[1]/td[2]/div/span[1]')
first = first.text
second = second.text
third = third.text
print(first, second, third)
today = date.today()
today1 = today.strftime('%b %d %Y')
list = (today1, first, second, third)
print(list)
file = open('test.txt', 'a')
file.write(today1)
file.write(' ')
file.write(first)
file.write(' ')
file.write(second)
file.write(' ')
file.write(third)
file.write('n')
file.close()
driver.close()
Комментарии:
1. Когда вы говорите «запуск файла .py», вы имеете в виду, что вы дважды щелкаете по нему в проводнике Windows, и он запускается? Вероятно, это означает, что у вас есть «pylauncher», который запускает его, и это будет держать окно открытым — но это действительно зависит от того, какая программа настроена на вашем компьютере для запуска файлов .py. Похоже, что ваш код не виноват — он завершается, и оттуда он ничего не может сделать, чтобы закрыть окно.
2. Я не знаю, почему терминал останется открытым, но вы можете позвонить
exit()
, чтобы завершить сценарий.3. Это терминал или браузер Chrome, который остается открытым?
4. или переименуйте его из
.py
в.pyd
5. вы пробовали запускать его как задачу Windows? Окно терминала может быть там только из-за того, как вы запустили его в графическом интерфейсе.
Ответ №1:
Для 1. вам необходимо отправить запущенный процесс в фоновый режим и удалить связанное задание из текущей оболочки.
Нажмите Ctrl
Z
и введите bg
, чтобы отправить процесс установки в фоновую панель, затем введите disown
.
Теперь вы можете закрыть терминал, процесс все еще будет работать. Вы можете открыть другой терминал и проверить его идентификатор процесса с помощью ps -aef
В моем случае идентификатор процесса 14426
равен . К сожалению, нет простого способа повторно подключить его к другому терминалу (см. Как подключить терминал к отдельному процессу?) если вы не использовали что-то, основанное на screen
.
Для 2. Вы можете использовать следующую команду:
while kill -0 14426 >/dev/null 2>amp;1; do sleep 5 ; done ; echo "ok"
Он будет напечатан ok
, когда процесс завершится с другого терминала. Вы, конечно, можете изменить эту echo
команду на что-то более сложное.
Источник: BASH: запустите фоновый процесс и проверьте, когда он закончится
Комментарии:
1. Поскольку скрипт завершается в конце, я все равно не понимаю, как это поможет.
Ответ №2:
Хорошо, я нашел кое-что, что сработало. Я заметил, что процесс chromedriver все еще выполняется даже после выполнения строки driver.close()
. Я пошел дальше и остановил процесс, и скрипт немедленно закрылся. Я предполагаю driver.close()
, что закрывает окно Chrome, но не убивает chromedriver, поэтому скрипт зависал в ожидании завершения процесса. Я заменил driver.close()
на driver.quit()
и теперь скрипт закрывается после запуска. Спасибо всем за помощь!!