Как очистить запланированные совещания WebEx в Python - PullRequest
1 голос
/ 08 апреля 2020

Как я могу перечислить запланированные совещания WebEx? Вот WebElements

Элемент:

<div class="meeting_list"><div role="region" aria-label="My Webex Meetings list" class="meeting_list_content" style=""><!----> <!----> <!----> <div role="grid" aria-relevant="additions removals" class="m_list" style=""><div class="m_list_item m_list_item_0"><div class="col col_1 col_0_1"><span class="avatar_img avatar_small" style="background-image: url(&quot;https://mirantis.webex.com/avatarservice/v1/users/520902917/avatars/390b91c0-571c-4889-a708-57c891b44315?siteurl=mirantis&amp;size=64&quot;);"><img src="https://mirantis.webex.com/avatarservice/v1/users/520902917/avatars/390b91c0-571c-4889-a708-57c891b44315?siteurl=mirantis&amp;size=64" alt="Avatar Picture"></span></div> <div class="col col_2 col_0_2"><div><div class="list_t">
    11:00 AM - 12:00 PM
  </div> <div class="list_st">Wed, Apr 8</div></div></div> <div class="col col_3 col_0_3"><div class="list_t"><div class="meeting_topic meetings"><a href="javascript:void(0)" title="#3446655 Instance hangs on migration, virsh commands timedout" class="">
          #3446655 Instance hangs on migration, virsh commands timedout&nbsp;
        </a></div> <div class="back meeting_topic_column"><!----> <!----> <!----> <!----> <!----> <span><!----></span></div></div> <div class="list_st">Mirantis Operations&nbsp;</div></div> <div class="col col_4 col_0_4"><span class="list_btn"><button type="button" class="el-button el-button--success" aria-label="Press enter to Start the meeting."><!----><!----><span>Start</span></button></span></div></div><div class="m_list_item m_list_item_1"><div class="col col_1 col_1_1"><span class="avatar_img avatar_small" style="background-image: url(&quot;https://mirantis.webex.com/avatarservice/v1/users/520902917/avatars/390b91c0-571c-4889-a708-57c891b44315?siteurl=mirantis&amp;size=64&quot;);"><img src="https://mirantis.webex.com/avatarservice/v1/users/520902917/avatars/390b91c0-571c-4889-a708-57c891b44315?siteurl=mirantis&amp;size=64" alt="Avatar Picture"></span></div> <div class="col col_2 col_1_2"><div><div class="list_t">
    12:00 PM - 1:00 PM
  </div> <div class="list_st">Wed, Apr 8</div></div></div> <div class="col col_3 col_1_3"><div class="list_t"><div class="meeting_topic meetings"><a href="javascript:void(0)" title="00122550 EMEA Scanner is not scanning properly" class="">
          00122550 EMEA Scanner is not scanning properly&nbsp;
        </a></div> <div class="back meeting_topic_column"><!----> <!----> <!----> <!----> <!----> <span><!----></span></div></div> <div class="list_st">Mirantis Operations&nbsp;</div></div> <div class="col col_4 col_1_4"><span class="list_btn"><button type="button" class="el-button el-button--success" aria-label="Press enter to Start the meeting."><!----><!----><span>Start</span></button></span></div></div> <div class="infinite-loading-container"><div style="display: none;"><i class="loading-spiral"></i></div> <div class="infinite-status-prompt" style="display: none;"><span></span></div> <div class="infinite-status-prompt" style=""><span></span></div></div></div> <div><!----> <div><!----></div></div><div class="el-loading-mask" style="display: none;"><div class="el-loading-spinner"><svg viewBox="25 25 50 50" class="circular"><circle cx="50" cy="50" r="20" stroke-width="2" stroke="#D1D3D7" fill="none"></circle><circle cx="50" cy="50" r="20" fill="none" class="path"></circle></svg><!----></div></div></div></div>

Как вы можете ясно видеть, в этом списке перечислены доступные собрания в HTML. Тем не менее, я просто хотел бы получить чистый список этого. Вот определенный XPATH:

//*[@id="main_content"]/div[1]/div/div/div[2]/div

Можно ли как-нибудь сгрести эту информацию в python? Мне удалось получить успешный запрос, но документация кажется недостаточной для работы с GET-запросами к WebEx.

Вот мой код, который, по крайней мере, позволил мне успешно пройти аутентификацию.

#!/usr/bin/env python

import json
import logging
import pandas as pd
import os
import requests
import subprocess
import lxml
import time
import unittest
from requests.auth import HTTPBasicAuth
from lxml import html

with open('secrets.json','r') as f:
        config = json.load(f)

requests.get('https://mirantis.webex.com', 
              auth=HTTPBasicAuth(config['username']['password']))

# GET Page Source
page = requests.get('https://mirantis.webex.com/webappng/sites/mirantis/meeting/home')
tree = html.fromstring(page.content)

# GET Meetings
meetings = tree.xpath('//*[@id="main_content"]/div[1]/div/div/div[2]/div/div')
meetings

Я хотел бы перечислить это в кадре данных, вероятно, с Pandas:

enter image description here

Однако, что я получить это ничего ... это просто пусто Обычно я ожидаю увидеть результаты, но это просто ничего:

>>> page = requests.get('https://mirantis.webex.com/webappng/sites/mirantis/dashboard?siteurl=mirantis')
>>> tree = html.fromstring(page.content)
>>> meetings = tree.xpath('//*[@id="main_content"]/div/div[1]/div[2]/div/div')
>>> meetings
[]

Когда я использую page.content, я получаю HTML тело, я неправильно это очищаю?

1 Ответ

1 голос
/ 08 апреля 2020

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

используйте pip для установки через pip install selenium

Вам также необходимо загрузить chrome (если вы выбираете драйвер) из https://chromedriver.chromium.org/downloads и отрегулируйте фрагмент кода, который я добавил, чтобы указать на правильный chrome двоичный файл драйвера

from selenium.webdriver import Chrome

url = "https://mirantis.webex.com/webappng/sites/mirantis/dashboard?siteurl=mirantis"
chrome_driver_path = "<path_to_chrome_driver>"
xpath_pattern = '//*[@id="main_content"]/div/div[1]/div[2]/div/div'


def find_meetings(driver, pattern):
    meetings = driver.find_elements_by_xpath(pattern)
    #do something here

driver = Chrome(chrome_driver_path)
try:
    driver.get(url)
    find_meetings(driver, xpath_pattern)
finally:
    driver.close()
...