• Почему XPATH возвращает пустой список?

    @IPredator Автор вопроса
    Dimonchik насколько я понял,
    BeautifulSoup
    не работает с javascript и не сможет извлечь информацию
  • Почему XPATH возвращает пустой список?

    @IPredator Автор вопроса
    Dimonchik, Да, сделал через селениум

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.common.exceptions import TimeoutException
    from selenium.webdriver.support.ui import WebDriverWait as wait
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import StaleElementReferenceException
    import time
    
    driver = webdriver.Firefox()
    
    driver.get("https://*********")
    time.sleep(3)
    
    #Учетные данные
    username = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div[2]/div[3]/div[1]/div[3]/div[1]/form/div[2]/div[2]/div[2]/input')
    username.send_keys("********")
    password = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div[2]/div[3]/div[1]/div[3]/div[1]/form/div[2]/div[3]/div[2]/input[2]')
    password.send_keys("**********")
    
    
    #кнопка войти на странице авторизации
    button = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div[2]/div[3]/div[1]/div[3]/div[1]/form/div[3]/button[2]')
    
    try:
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable(button))
        button.click()
    except TimeoutException:
        print("Кнопка не найдена на странице")
    
    #Переходим на страницу Управление контрактом
    kontrakt = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div[1]/ul/li[2]')
    
    try:
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable(kontrakt))
        kontrakt.click()
        print(kontrakt)
    except StaleElementReferenceException:
        print("Element no longer attached to the DOM")


    робот гуляет по сайту, сейчас курю тему как извлекать данные через селениум
  • Почему XPATH возвращает пустой список?

    @IPredator Автор вопроса
    так НЕ пишут

    можно, если нужно

    господи, что я только что прочитал
  • Почему XPATH возвращает пустой список?

    @IPredator Автор вопроса
    Dimonchik При чем здесь код на python и Xpath ?
  • Почему XPATH возвращает пустой список?

    @IPredator Автор вопроса
    <code>esponse
     
    id
    ="
    j_id1
    "
    >
    <changes
    >
    <update
     
    id
    ="
    messages
    "
    >
    <span id="messages" class="ui-growl-pl" data-widget="widget_messages" data-global="data-global" data-summary="data-summary" data-severity="all,error" data-redisplay="true"></span><script id="messages_s" type="text/javascript">$(function(){PrimeFaces.cw('Growl','widget_messages',{id:'messages',sticky:false,life:6000,escape:true,msgs:[]});});</script>
    </update
    >
    <update
     
    id
    ="
    reportButtonsForm:buttonsPanel
    "
    >
    <div id="reportButtonsForm:buttonsPanel" class="ui-outputpanel ui-widget">
          <div class="select-one-button"><span id="reportButtonsForm:leftButtonLabel" class="left-button">Текущий период</span><a id="reportButtonsForm:rightButton" href="#" class="ui-commandlink ui-widget right-button" onclick="PrimeFaces.ab({s:&quot;reportButtonsForm:rightButton&quot;,p:&quot;reportButtonsForm:rightButton&quot;,u:&quot;reportDetailUnbilledForm reportDetailUnbilledButtonsForm reportDetailBilledForm reportDetailUnbilledExcelButtonForm&quot;,onst:function(cfg){PF('buttonsPanelBlock').show();},onco:function(xhr,status,args){PF('buttonsPanelBlock').hide();}});return false;">По счёту</a>
          </div></div>
    </update
    >
    <update
     
    id
    ="
    reportDetailUnbilledButtonsForm
    "
    >
    
    <form id="reportDetailUnbilledButtonsForm" name="reportDetailUnbilledButtonsForm" method="post" action="/b/info/subscriberDetail.xhtml" enctype="application/x-www-form-urlencoded">
    <input type="hidden" name="reportDetailUnbilledButtonsForm" value="reportDetailUnbilledButtonsForm" />
    <div id="reportDetailUnbilledButtonsForm:subscriberUnbilledCharges" class="ui-outputpanel ui-widget subscriber-unbilled-charges">
            <div class="item"><span class="title">Трафик с НДС, руб.</span>600
            </div>
            <div class="item"><span class="title">Абонентская плата с НДС, руб.</span>886,08
            </div>
            <div class="item"><span class="title">Подключение услуг и изменения сервиса с НДС, руб.</span>0
            </div>
            <div class="item"><span class="title">Итого с НДС, руб.</span>1486,08
            </div></div>
        <div class="block-padding">
          <div class="buttons-set"><button id="reportDetailUnbilledButtonsForm:offlineReportButton" name="reportDetailUnbilledButtonsForm:offlineReportButton" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only orange" onclick="yaB2BReportChargeCurrent(); wtReportPersonal();  loadUnbilledCalls(); loadUnbilledCharges();;PrimeFaces.ab({s:&quot;reportDetailUnbilledButtonsForm:offlineReportButton&quot;,onst:function(cfg){PF('buttonsPanelBlock').show();;}});return false;" type="submit"><span class="ui-button-text ui-c">Получить детализацию</span></button><script id="reportDetailUnbilledButtonsForm:offlineReportButton_s" type="text/javascript">PrimeFaces.cw("CommandButton","widget_reportDetailUnbilledButtonsForm_offlineReportButton",{id:"reportDetailUnbilledButtonsForm:offlineReportButton"});</script><script type="text/javascript">loadUnbilledCharges = function() {PrimeFaces.ab({s:"reportDetailUnbilledButtonsForm:j_idt5203",f:"reportDetailUnbilledButtonsForm",u:"reportDetailUnbilledButtonsForm messages reportDetailUnbilledExcelButtonForm:excelDetailOnlineButton",a:true,onst:function(cfg){PF('buttonsPanelBlock').show();;},onco:function(xhr,status,args){PF('buttonsPanelBlock').hide();;},pa:arguments[0]});}</script><script type="text/javascript">loadUnbilledCalls = function() {PrimeFaces.ab({s:"reportDetailUnbilledButtonsForm:j_idt5204",f:"reportDetailUnbilledButtonsForm",u:"messages reportDetailUnbilledForm reportDetailUnbilledExcelButtonForm:excelDetailOnlineButton @(.unbilled-calls-notification)",a:true,onst:function(cfg){showLoaderOverlay('.report-unbilled-calls');;},onco:function(xhr,status,args){hideLoaderOverlay('.report-unbilled-calls'); if (args.dataRecieved == false) {PF('unbilledConfirm').show();} else {softScrollIntoView('#reportDetailUnbilledForm .ui-datatable>table', 350);} yaB2BReportChargeCurrent();;},pa:arguments[0]});}</script>
          </div>
        </div>
    </form>
    </update
    >
    <update
     
    id
    ="
    reportDetailUnbilledExcelButtonForm:excelDetailOnlineButton
    "
    >
    <div id="reportDetailUnbilledExcelButtonForm:excelDetailOnlineButton" class="ui-outputpanel ui-widget">
        <div class="download-xls">
    <script type="text/javascript" src="/b/javax.faces.resource/jsf.js.xhtml?ln=javax.faces"></script>
    <a href="#" onclick="mojarra.jsfcljs(document.getElementById('reportDetailUnbilledExcelButtonForm'),{'reportDetailUnbilledExcelButtonForm:j_idt5207':'reportDetailUnbilledExcelButtonForm:j_idt5207'},'');return false">
            <span>Выгрузить в Excel</span></a>
        </div></div>
    </update
    >
    <update
     
    id
    ="
    j_id1:javax.faces.ViewState:0
    "
    >
    1295757042179214867:1025666253606222199
    </update
    >
    <extension
     
    ln
    ="
    primefaces
    "
     
    type
    ="
    args
    "
    >
    {"unbilledChargesReceived":true}
    </extension
    >
    <eval
    >
    loadHeaderRequests(0,10000);
    </eval
    >
    </changes>
    </partial-response></code>
  • Почему XPATH возвращает пустой список?

    @IPredator Автор вопроса
    Влад Григорьев сейчас покопался, похоже все такие эти данные содержатся в html -коде страницы 63e9f28543d7d253753702.png
  • Почему XPATH возвращает пустой список?

    @IPredator Автор вопроса
    Влад Григорьев, видимо вы правы.
    Буду пробовать через селениум
  • Почему XPATH возвращает пустой список?

    @IPredator Автор вопроса
    Влад Григорьев
    Соответственно и код ее открывает. реквест проходит и возвращает 200.
  • Почему XPATH возвращает пустой список?

    @IPredator Автор вопроса
    Влад Григорьев страницу не посмотреть, требуется авторизация на сайте. логин и пароль скинуть не могу уж простите.
    Страница открывается , вот с нее скрины 63e9e0e9b7164518559954.png63e9e0ef0eec8484037815.png
    Соответственно и код ее открывает. реквест проходит и возвращает 200.

    Вот HTML этой страцы от куда должны парситься данные

    view-source:https://my.beeline.ru/b/info/subscribe...
  • Почему XPATH возвращает пустой список?

    @IPredator Автор вопроса
    Хорошо, объясню так, вот весь код:

    from bs4 import BeautifulSoup
    from lxml import html
    import requests
    
    
    # Учётные данные для входа
    username = "********"
    password = "**********"
    
    # URL-адрес для входа в систему
    login_url = "*****************"
    # данные авторизации
    data = {
        "j_username": username,
        "j_password": password,
    }
    
    # Отправить запрос на вход в систему
    session = requests.Session()
    response = session.post(login_url, data=data)
    
    # Проверить, успешен ли вход на сайт
    if response.status_code == 200:
        print("Вход на сайт выполнен успешно")
    else:
        print("Логин или пароль неверные")
    # вывод информации и токене авторизации в файле куки
    #print(response.headers)
    #print(session.cookies)
    
    #Страница управление контрактом
    contract_management_url = "******"
    
    #токен авторизации
    headers = {
        "Cookie": ****"
    }
    
    response = session.get(contract_management_url, headers=headers)
    
    if response.status_code == 200:
        print("Страница Управление контрактом открыта")
    else:
        print("Страница не существует")
    
    url_detail = '********'
    response = requests.get(url_detail, headers=headers)
    
    
    if response.status_code == 200:
        print("Страница c номером *********** открыта, начинаю извлечение информации о детализации за месяц...")
    else:
        print("Страница не существует")
    
    tree = html.fromstring(url_detail)
    
    detail = tree.xpath(
        '//*[@id="reportDetailUnbilledButtonsForm:subscriberUnbilledCharges"]/div[1]/span/text()')
    print(detail)
    
    #reportDetailUnbilledButtonsForm\:offlineReportButton > span


    Соответственно вывод у команды сейчас такой:

    Вход на сайт выполнен успешно
    Страница Управление контрактом открыта
    Страница c номером *********** открыта, начинаю извлечение информации о детализации за месяц...
    [ ]


    Что происходит на сайте, когда им пользуется человек

    Открываем эти страницы по порядку, как в коде. Затем на последней странице, которая у меня в переменной url_detail есть кнопка "Получить детализацию" при нажатии на нее, выходят данные о детализации за месяц определенного номера телефона за текущий месяц (на настоящий момент).
    Что я делаю, нажал ПКМ по этой кнопке и выбрал "Просмотреть код" . С права в браузере окрылось окно с HTML данного элемента страницы. Далее я нажал правой кнопкой , по html коду данного элемента кнопки) и выбрал копировать Xpath . в общем это
    //*[@id="reportDetailUnbilledButtonsForm:subscriberUnbilledCharges"]/div[1]/span/text()

    и есть xpath.
    Надеюсь понятно настрочил...