Откройте Блокнот Jupyter через подпроцесс кода Python - PullRequest
0 голосов
/ 20 марта 2019

Я объясняю идею, а затем проблему, которую я получил. Идея заключается в том, чтобы открыть Jupyter Notebook с помощью кода Python, получить токен, а с помощью другого сценария Python перейти Selenium к блокноту Jupyter и получить скриншот имеющихся у меня виджетов Google Maps.

Итак, я открываю ноутбук Jupyter:

import subprocess
proc = subprocess.Popen('jupyter notebook', shell=False, stdout=subprocess.PIPE)

Консоль

[I 18:03:46.460 NotebookApp] The port 8888 is already in use, trying another port.
[I 18:03:46.460 NotebookApp] The port 8889 is already in use, trying another port.
[I 18:03:46.460 NotebookApp] The port 8890 is already in use, trying another port.
[I 18:03:46.538 NotebookApp] JupyterLab extension loaded from C:\ProgramData\Anaconda3\lib\site-packages\jupyterlab
[I 18:03:46.538 NotebookApp] JupyterLab application directory is C:\ProgramData\Anaconda3\share\jupyter\lab
[I 18:03:46.611 NotebookApp] Serving notebooks from local directory: C:\Users\maranda\Desktop\PycharmProjects
[I 18:03:46.611 NotebookApp] The Jupyter Notebook is running at:
[I 18:03:46.611 NotebookApp] http://localhost:8891/?token=6ff95c98d52d38b3a607f605776a83271f7d15c176a610ac
[I 18:03:46.611 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 18:03:46.711 NotebookApp] 

    To access the notebook, open this file in a browser:
        file:///C:/Users/maranda/AppData/Roaming/jupyter/runtime/nbserver-26572-open.html
    Or copy and paste one of these URLs:
        http://localhost:8891/?token=6ff95c98d52d38b3a607f605776a83271f7d15c176a610ac
[W 18:03:46.720 NotebookApp] 404 GET /api/kernels/76abff7e-7bd6-459e-9ace-9de7684d9b40/channels?session_id=872d7412fb4b464b8ee5d50bc63d94f4 (127.0.0.1): Kernel does not exist: 76abff7e-7bd6-459e-9ace-9de7684d9b40
[W 18:03:46.741 NotebookApp] 404 GET /api/kernels/76abff7e-7bd6-459e-9ace-9de7684d9b40/channels?session_id=872d7412fb4b464b8ee5d50bc63d94f4 (127.0.0.1) 29.42ms referer=None
[W 18:03:54.745 NotebookApp] Replacing stale connection: 76abff7e-7bd6-459e-9ace-9de7684d9b40:872d7412fb4b464b8ee5d50bc63d94f4

Это работает, но я хочу сохранить строку вывода приложения NotebookApp, где находится токен, чтобы сохранить его (например, записать в * .txt), а затем с другим сценарием Python использовать Selenium для подключения к моему ноутбуку Jupyter. а затем получите Selenium Скриншот виджетов Google Maps, которые я получил в своих ноутбуках Jupyter.

Когда я пытаюсь открыть Блокнот Jupyter через Selenium, он запрашивает у меня токен, поэтому мне нужно прочитать его с вывода подпроцесса выше.

Конечной целью является получение скриншотов виджетов Google Maps, так как я хочу получить слой трафика в определенный момент, если я экспортирую виджет через

embed_minimal_html('export.html', views=[fig])

У меня проблема с тем, что мне нужно выполнить экспортированный HTML, и он получает трафик в тот момент, когда он выполняется,

Любая помощь по этому вопросу будет высоко оценена !!

Спасибо заранее!

1 Ответ

0 голосов
/ 22 марта 2019

Наконец-то я мог сделать это по-другому.

Сначала я создаю виджеты GMaps и экспортирую их в локальную папку:

import gmaps
from ipywidgets.embed import embed_minimal_html
import ipywidgets
print(ipywidgets.__version__)
API_key = 'XXX'
gmaps.configure(api_key = API_key)
layer = gmaps.Traffic()
punto = (Lat, Long) 
fig = gmaps.figure(center=punto, zoom_level=13, layout = {'width' : '100%', 'height' : '500px'})
fig.add_layer(layer)
embed_minimal_html('Exported.html', views=[fig])
fig

ВАЖНО: я использую ipywidgets. версия = 7.2.1, поскольку самая старая версия 7.4.2 выдает ошибки с этим кодом.

После получения «Exported.html» нам нужно открыть его через браузер Chrome, я использую Selenium, затем нажимаю кнопку загрузки, которую виджет GMaps имеет через Selenium:

from selenium import webdriver
import time

options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument("--test-type")
options.add_argument("window-size=700,700")
driver = webdriver.Chrome(chrome_options=options, executable_path=r'chromedriver.exe path')
url = 'C:\Exported.html'
driver.get(url)
time.sleep(2)
driver.find_element_by_tag_name("button").click()
driver.close()

И это все. Я надеюсь, что кто-то может помочь с этим кодом,

Manuel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...