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")
<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:"reportButtonsForm:rightButton",p:"reportButtonsForm:rightButton",u:"reportDetailUnbilledForm reportDetailUnbilledButtonsForm reportDetailBilledForm reportDetailUnbilledExcelButtonForm",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:"reportDetailUnbilledButtonsForm:offlineReportButton",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>
Соответственно и код ее открывает. реквест проходит и возвращает 200.
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
есть кнопка "Получить детализацию" при нажатии на нее, выходят данные о детализации за месяц определенного номера телефона за текущий месяц (на настоящий момент).//*[@id="reportDetailUnbilledButtonsForm:subscriberUnbilledCharges"]/div[1]/span/text()