Как принять прерывание клавиатуры, не закрывая браузер, управляемый Selenium - PullRequest
2 голосов
/ 05 марта 2019

Я создал это test.html

<!doctype html>
<html>
  <head>
    <title>test</title>
    <script>
    function inc() {
      var counter = document.test.counter;
      counter.value = parseInt(counter.value) + 1;
    }
    </script>
  </head>
  <body>
    <form name="test">
      <p>
        <input type="text" value="0" name="counter" size="5">
        <input type="button" id="increment" value="increment" onclick="inc();">
      </p>
    </form>
  </body>
</html>

и test.py

import time
from os import path
from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get(path.abspath("test.html"))

try:
    n = 5
    for i in range(n):
        print("push %d / %d" % (i + 1, n))
        driver.find_element_by_id("increment").click()
        time.sleep(1)
except KeyboardInterrupt:
    print("interrupted")

print("waiting")
time.sleep(5)
print("bye")

в том же каталоге.

Когда я запускаю test.py из командной строки, используя команду python test.py, и я нажимаю Ctrl + C до печати "waiting", окно Google Chrome, открытое через Selenium, закрыто.

В моем реальном коде цикл вызывается из интерактивной консоли Python и выполняется неопределенное время. Я хочу, чтобы прерывания клавиатуры прерывались из цикла без закрытия окна Google Chrome для исследования и разработки.

Что я должен сделать, чтобы заархивировать это?

Мое окружение:

  • Windows 7 Home Premium с пакетом обновления 1 (64 бита)
  • Python 3.5.1 (64 бита)
  • Селен 3.141.0
  • urllib3 1.24.1
  • ChromeDriver 2.45.615291 (ec3682e3c9061c10f26ea9e5cdcf3c53f3f74387)
  • Google Chrome 72.0.3626.119 (официальная сборка) (64 бита)

Система предложила вопрос Selenium: выход из скрипта Python без закрытия браузера , но этот вопрос не показался мне полезным, потому что:

  • raw_input(), кажется, ожидает ввода пользователя. Я хочу, чтобы моя программа запускалась без ручного ввода, пока не сработает прерывание клавиатуры.
  • В моем реальном коде время для сна велико (около 10 минут) вместо 1 секунды в образце. Цикл должен быть разорван сразу после того, как я запускаю прерывания клавиатуры, а не после того, как будет сделан сон.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...