Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: supportpc в Jul 03, 2019, 19:52



Титла: Авариите на чез.
Публикувано от: supportpc в Jul 03, 2019, 19:52
Здравейте, някой да сподели ако знае как мога да направя да ми показва авариите на чез в моя страница. Благодаря предварително


Титла: Re: Авариите на чез.
Публикувано от: spec1a в Jul 03, 2019, 22:19
   Пишеш скрипт,който се свързва автоматично със:

http://www.cez.bg/bg/e-uslugi/avarii-remonti.html

като му подава стринг със името на съответния град.
Ще трябва да видиш в сорс-кода на страницата как точно е реализирано.
Най-вероятно се използва POST заявка.


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Jul 04, 2019, 11:22
пробвах го това но не става ако някой има други идеи да каже


Титла: Re: Авариите на чез.
Публикувано от: remotexx в Jul 04, 2019, 18:26
 А, как точно го пробва колега?

Е па отвори си браузъра, отвори вътре инспектора и отиди на мрежовия таб и след изпращане на заявката виж там какво точно изпраща.
...ако и в браузър не работи егати услугата.
Ако работи... Ще разбереш какво не му харесва
Я User-Agent ще им (подс)каже че си бот, щото браузърите нямат извътре нито Python, нито .net string и т.п. или пък може и заявката да си търси някои бисквитки подадени от сайта за да шкартира ботовете.

Успех, колега.

П.П.
Поздравявам сите съблогари-съмишленици с 4 юли.
https://youtu.be/6-VWuAoUpmQ


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Jul 05, 2019, 10:30
Както се каза, може User-agent-а да не му харесва, може да иска ибсквитки да ти запише, може JS да му трябва, че да работи.
Аз за тези нужди използвам PhantomJS.
Впрочем User-agent може да се задава, така че пробвай първо това.

Но сега погледнах, че дописва сам населените места, от които да си избереш, така че JS определено ще ти трябва.


Титла: Re: Авариите на чез.
Публикувано от: go_fire в Jul 05, 2019, 11:54
Не искам да се меся дето не ми е работа и дето не разбирам. Този отказ от отговорност е зле. Значи не трябва да се обаждам по нито една тема ;)

Ама от дни си го мисля и не виждам да се споменава. Последните години най-голямата мания за защита на данните е да се слагат жетони. Не е невъзможно и ЧЕЗ да ползват такова нещо.

Нито съм проверявал, нито ще проверя, но е напълно възможно мисията да е неизпълнима.


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Jul 05, 2019, 15:35
Как се слагат тези жетони? Бисквитки, сесия? Всичко това може да се използва в скрипт.


Титла: Re: Авариите на чез.
Публикувано от: go_fire в Jul 05, 2019, 16:13
В общи линии е някакво дълго чисълце или дробна табличка, която се изготвя за някакво време (пет минути, половин час, ден, разни). Няма никаква вероятност да я отгатнеш или предвидиш, защото ти е напълно неизвестен алгоритъма, който почти винаги се основава на (по-скоро псевдо) случайност.

Ползва се навсякъде и е толкова широко разпространено, че на практика е невъзможно да не го срещнеш. Като всичко ново на тоя свят е идея на Гългъл. Пък и човек да не го знае, то е ясно, че е в техен стил. Нещо наукоемко създадено с единствена цел да прецаква клиентите.

п.п. Видях, че питаш и как се получава. Може всякак. Но най-вече се ползва методи на прихващане или внасяне (get and post).


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Jul 05, 2019, 20:34
Ами PhantomJS си е пълнофункционален браузър. А може да се използва headless Chrome или Firefox. Същата работа е. Та, може да се автоматизира всичко.


Титла: Re: Авариите на чез.
Публикувано от: go_fire в Jul 06, 2019, 00:39
Въпроса не е дали може да го изпробва, че работи, а дали може да го вгради в негова страница.


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Jul 06, 2019, 05:09
Той като вземе данните, после може да ги сложи в която си иска страница.


Титла: Re: Авариите на чез.
Публикувано от: spec1a в Jul 06, 2019, 10:33
Ами PhantomJS си е пълнофункционален браузър. А може да се използва headless Chrome или Firefox. Същата работа е. Та, може да се автоматизира всичко.

+1


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Jul 29, 2019, 11:03
Май никой не може да намери решение по този казус ще го мисля. Благодаря все пак на всички


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Jul 29, 2019, 11:58
Мислех си, че сме ти дали решение.
Ще трябва малко да попрограмираш.


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Jul 29, 2019, 12:01
ами нещо не се получи, ако някой може да ми даде един пример примерно с някои квартал, ще му бъда благодарен


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Jul 29, 2019, 13:35
Покажи, какво си направил досега.


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Jul 29, 2019, 14:07
ами нищо не съм направил защо не се получи и всичко изтрих тово е,


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Jul 29, 2019, 14:08
ако никой не помогне ще го мисля пак


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Jul 29, 2019, 14:39
Пробвай пак и дай кода тук, ако не стане.


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 07, 2020, 14:52
някой постигнал ли е нещо с това което питах


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 07, 2020, 17:01
Дай код и ще погледнем, къде не е наред.


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 07, 2020, 17:25
няма код всичко изтрих ядосах се


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 07, 2020, 18:07
Тази тема не е от вчера. Имаше и голяма разлика между последното ти питане и сега. Време да напишеш и пробваш нещо със сигурност си имал. Ако цениш нашето време, дето евентуално ще се помага, хубаво е някакво усилие да покажеш. Мога да ти пратя нещо работещо, но трябва да седна да го направя аз. И както казах, това е време, което точно в момента не мога да отделя.


Титла: Re: Авариите на чез.
Публикувано от: spec1a в Feb 09, 2020, 11:38
   Можеш и да видиш пълно инфо за това какво се търкаля по
мрежата от/до браузъра ти,като посещаваш съответния сайт,
това ще те улесни много.
   За firefox: ctrl+shift+e


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 10, 2020, 13:44
да всичко съм изтрил защо не,  можах да го направя доста е сложно защо инфото е динамично в сайта на чез
Тази тема не е от вчера. Имаше и голяма разлика между последното ти питане и сега. Време да напишеш и пробваш нещо със сигурност си имал. Ако цениш нашето време, дето евентуално ще се помага, хубаво е някакво усилие да покажеш. Мога да ти пратя нещо работещо, но трябва да седна да го направя аз. И както казах, това е време, което точно в момента не мога да отделя.


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 11, 2020, 21:30
да всичко съм изтрил защо не,  можах да го направя доста е сложно защо инфото е динамично в сайта на чез
Тази тема не е от вчера. Имаше и голяма разлика между последното ти питане и сега. Време да напишеш и пробваш нещо със сигурност си имал. Ако цениш нашето време, дето евентуално ще се помага, хубаво е някакво усилие да покажеш. Мога да ти пратя нещо работещо, но трябва да седна да го направя аз. И както казах, това е време, което точно в момента не мога да отделя.
Не зная, какво си изтрил, щото било сложно.
Според мен нищо не си опитал.

Ето колко е сложно всъщност - 10 реда код на Python, включително празните редове:
Код:
from selenium import webdriver


driver = webdriver.PhantomJS()
driver.get('http://www.cez.bg/bg/e-uslugi/avarii-remonti.html')
driver.switch_to.frame(driver.find_elements_by_tag_name('iframe')[0])
driver.find_element_by_id('searchField').send_keys('Перник')

for element in driver.find_elements_by_class_name('ui-btn'):
    print(element.text)


Изплюва това:

Код:
ЛЕСКОВЕЦ, ОБЩ. ПЕРНИК
ЛЮЛИН, ОБЩ. ПЕРНИК
ПЕРНИК
ПЛАНИНИЦА, ОБЩ. ПЕРНИК
СТУДЕНА, ОБЩ. ПЕРНИК
ЧЕРНА ГОРА, ОБЩ. ПЕРНИК

Предполагам, че това е достатъчно инфо, за да продължиш.


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 14, 2020, 10:50
Колега не съм се опитвал с питон защо не го разбирам достатъчно да бях направил на php но не се получи


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 14, 2020, 10:59
Колега благодаря все пак че отдели време за мен  ще го тествам


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 14, 2020, 12:01
Колега благодаря все пак че отдели време за мен  ще го тествам
Не съм колега, защото това ми е хоби и го ползвам да си улеснявам живота.

Ако разгледаш кода, той е достатъчно ясен. Особено методите на Selenium. Имената им казват, какво точно правят.
А елементите от уеб страницата са селектирани по css - class или id.

На теб ти трябват последните два реда. Трябва само да сравниш съвпадението в tag.text, както съм направил и ако съвпада с желаното, да element.click()-неш върху него, а после да влемеш резултата пак селектирайки от DOM каквото ти е нужно, , както е направено малко по-нагоре и вземайки текста му.

Докато тествах скрипта ми излизаше предупреждение, че PhantomJS e остаряло и изглежда не е по силите на разработчика да го бута напред. Няма достатъчно помощници. Можеш да свалиш chromedriver ($2) и да го сложиш при скрипта или където искаш. Можеш, при инициирането на driver ( или както някои го кръщават browser - все едно ) да окажеш и пътя до него, та си го плясни, където ти е угодно. Как да използваш chromedriver със Selenium и Python има навсякъде.

Това му е хубавото на този език - можеш да си свършиш работата без много усилия. В повечето случаи



Титла: Re: Авариите на чез.
Публикувано от: go_fire в Feb 14, 2020, 12:20
А бе тоя водач, не беше ли си част от дистрибуцията на Google Chromium? Или говориш да го лашка на сървъра?

Ама то не знаем, какво му е домуването. Ако е това стандартното от време оно или облачно, то може и да не може да го слага. Трябва му виртуалка или затвор (както наглуите гългълци му казват контейнер).


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 14, 2020, 12:37
добре ще го тествам
Колега благодаря все пак че отдели време за мен  ще го тествам
Не съм колега, защото това ми е хоби и го ползвам да си улеснявам живота.

Ако разгледаш кода, той е достатъчно ясен. Особено методите на Selenium. Имената им казват, какво точно правят.
А елементите от уеб страницата са селектирани по css - class или id.

На теб ти трябват последните два реда. Трябва само да сравниш съвпадението в tag.text, както съм направил и ако съвпада с желаното, да element.click()-неш върху него, а после да влемеш резултата пак селектирайки от DOM каквото ти е нужно, , както е направено малко по-нагоре и вземайки текста му.

Докато тествах скрипта ми излизаше предупреждение, че PhantomJS e остаряло и изглежда не е по силите на разработчика да го бута напред. Няма достатъчно помощници. Можеш да свалиш chromedriver ($2) и да го сложиш при скрипта или където искаш. Можеш, при инициирането на driver ( или както някои го кръщават browser - все едно ) да окажеш и пътя до него, та си го плясни, където ти е угодно. Как да използваш chromedriver със Selenium и Python има навсякъде.

Това му е хубавото на този език - можеш да си свършиш работата без много усилия. В повечето случаи


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 14, 2020, 12:39
А бе тоя водач, не беше ли си част от дистрибуцията на Google Chromium? Или говориш да го лашка на сървъра?

Ама то не знаем, какво му е домуването. Ако е това стандартното от време оно или облачно, то може и да не може да го слага. Трябва му виртуалка или затвор (както наглуите гългълци му казват контейнер).
Chromedriver е ( както го водят headless ) обезглавен браузър - без графичния интерфейс. Само машинарията. И можеш да го управляваш така, както правиш с нормален. Да пишеш в полетата, да кликваш, да чакаш JS да си свърши магариите. Пълнофункционален браузър си е, но без графичната среда. Дръпнах го и аз, да го имам, че си трябва от време на време при разни такива... автоматизации. Да извлечеш нещо оттук-оттам, без да цъкаш като полудял с мишката напред-назад. И за тестване на уеб приложения се ползва страшно много.

Със Selenium може да се ползва по същия начин и Firefox. И двата браузъра можеш да ги ползваш със Selenium и нормално. Пуска се истински браузър с графичната му среда, но можеш да си го управляваш през скрипта. Чудничко!  ;D



Цитат
добре ще го тествам
Същото можеш да го направиш  и с PHP предполагам. Само трябва да си поиграеш малко с Developer tools на браузъра - F12. Да поразгледаш, какви ajax заявки се изпращат и какво се получава, след като напишеш населено място в полето за търсене. А може всичко да е пристигнало още с първоначалната страница, тъй като населените места подвластни на ЧЕЗ едва ли са толкова много и просто ги рендва, ако има нещо в полето за търсене.
Основното е, каква заявка се праща, когато се натисне Enter със съответното населено място. Това ти трябва единствено. И да парснеш отговора разбира се. Сигурно някой json.


Титла: Re: Авариите на чез.
Публикувано от: go_fire в Feb 14, 2020, 12:51
Скоро някой (дали не беше p4p), сложи тук една програмка на Gо за команден ред, дето ти тараши DOM и спестява цялата галимация с js. Макар, че с нея няма как да „цъкаш“. Там просто се извлича, каквото трябва и ти го изплюва. Твоя работа е, какво ще го правиш.


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 14, 2020, 12:59
Скоро някой (дали не беше p4p), сложи тук една програмка на Gо за команден ред, дето ти тараши DOM и спестява цялата галимация с js. Макар, че с нея няма как да „цъкаш“. Там просто се извлича, каквото трябва и ти го изплюва. Твоя работа е, какво ще го правиш.
Ще ми е интересна да я видя, защото не съм много сигурен, как би казал на програмката, какво искаш да намери, ако не отвориш кода на страницата/инструментите и да видиш тагове, класове и id-та.


Титла: Re: Авариите на чез.
Публикувано от: kingfisher в Feb 14, 2020, 13:20
https://github.com/ericchiang/pup


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 14, 2020, 13:55
Супер! Благодаря!

Явно все пак трябва да се похледне кода на страницата, че да му кажеш, какво точно да ти измъкне.
Лесна работа с вградените инструменти на браузърите


Титла: Re: Авариите на чез.
Публикувано от: go_fire в Feb 14, 2020, 14:26
Този е, благодаря Кинг Фишер!

Изрових го:

... като с cURL взимаме HTML-а и го парсваме с туул като pup например - https://github.com/ericchiang/pup (писан на Go и много добре оптимизиран). Така реално няма квоти за брой заявки, каквито налагат повечето API-та.

Моя грешка, Programings e бил, а не p4p. Надявам се да не ми се сърди за объркването. Той също е писал в темата.


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 14, 2020, 15:35
Има го и този ($2) проект на Гугъл, но инсталацията му е почти 300 мегабайта. Отново контролира Хром.
Може да прави благинки като да произведе PDF от отделен DOM елемент. Например директно картинка, парче параграф или каквото ще да е.
Обаче е за Node.js

Предполагам, същото може да се направи и с други инструменти или нещо работещо под Python обаче не съм пробвал.


Титла: Re: Авариите на чез.
Публикувано от: remotexx в Feb 14, 2020, 17:41
и моите 5 ст.

като ще си  мерим езиците (отново) да споменем и още 2-3 основни - С++ и Bash :
QtWebEngine ($2)
и ..някои опции от командния ред
Код
GeSHi (Bash):
  1. chrome --headless --dump-dom --repl etc.

Другата голяма разлика е че обик. --headless ползват пълноценния браузър (само му скриват UI-я) докато тия за вграждане (напр. CEF - Chromium Embedded Framework) ползват достта поорязана версия ...със няколко (стотин) МБ поорязана така че напр. Хрома не праща телеметрия до гугъла и лисика до дето пращат лисиците, и още някой нещица ги няма имплементирани напр. Ctrl+Scroll не ти намалява/уголемява шрифта (освен ако не си го имплементираш) ..и изобщо CEF ти дава по-пълен контрол и може да прави някой неща дето headelss не може (т.е. прави ги ама различно - следва стандарта) като напр. динамично да разрешаваш/забраняваш отваряне на URL според дали ти харесва домейна или не, с кое приложение да се отвори нестадартен протокол (напр. jabber) особ при положение че има няколко регистрирани хендлъра и искаш да е последния (а хрома винаги да вдига първия) и т.н.


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 14, 2020, 20:41
Не си мерим езиците. Аз искам да понауча JS, понеже искам да направя някои нещица на D3.js. Без основите няма да стане. Ajax, рендване на данни в страницата и подобни. И с Go бях започнал да се заигравам по едно време. Ма не съм сядал да кодя от има шест месеца поне.


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 16, 2020, 09:57
Здравей пробвах скрипта но не мога да го подкарам под Дебиан 9 казва ми да си заредя тези модули .PhantomJS selenium нo за дебиан нещо не става версията на питона е 3.7 и не става
да всичко съм изтрил защо не,  можах да го направя доста е сложно защо инфото е динамично в сайта на чез
Тази тема не е от вчера. Имаше и голяма разлика между последното ти питане и сега. Време да напишеш и пробваш нещо със сигурност си имал. Ако цениш нашето време, дето евентуално ще се помага, хубаво е някакво усилие да покажеш. Мога да ти пратя нещо работещо, но трябва да седна да го направя аз. И както казах, това е време, което точно в момента не мога да отделя.
Не зная, какво си изтрил, щото било сложно.
Според мен нищо не си опитал.

Ето колко е сложно всъщност - 10 реда код на Python, включително празните редове:
Код:
from selenium import webdriver


driver = webdriver.PhantomJS()
driver.get('http://www.cez.bg/bg/e-uslugi/avarii-remonti.html')
driver.switch_to.frame(driver.find_elements_by_tag_name('iframe')[0])
driver.find_element_by_id('searchField').send_keys('Перник')

for element in driver.find_elements_by_class_name('ui-btn'):
    print(element.text)


Изплюва това:

Код:
ЛЕСКОВЕЦ, ОБЩ. ПЕРНИК
ЛЮЛИН, ОБЩ. ПЕРНИК
ПЕРНИК
ПЛАНИНИЦА, ОБЩ. ПЕРНИК
СТУДЕНА, ОБЩ. ПЕРНИК
ЧЕРНА ГОРА, ОБЩ. ПЕРНИК

Предполагам, че това е достатъчно инфо, за да продължиш.


Титла: Re: Авариите на чез.
Публикувано от: spec1a в Feb 16, 2020, 11:36
   Преди време коментирахме проблемите с версиите на питона.
Като за начало,напиши какво ти дава командата:

ls -l /usr/bin/python*


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 16, 2020, 12:32
Selenium и PhantomJS ги няма вградени в Python.
Трябва да се инсталират отделно.

[PhantomJS]
За PhantomJS отиваш на този ($2) адрес и сваляш нещото. После го пляскаш в някоя директория, която ти е в PATH или при скрипта.

Друг начин за инсталацията му е да инсталираш Node.js, после да изпълниш npm -g install phantomjs-prebuilt

[Selenium]
Най-лесно е, да използваш pip. Това е пакетен манажер точно както apt например, който инсталира пакети от Python Package Index ($2) ( PyPi ).

pip install Selenium


Впрочем, PhantomJS може да го има и в хранилищата на Debian

https://packages.debian.org/search?lang=it&searchon=names&keywords=phantomjs

Горния линк е на испански, щото си бях превключил клавиатурата и тъпата търсачка е задала някакви параметри. Ма го има и можеш през apt да си го инсталираш


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 18, 2020, 16:03
#!/usr/bin/env python
# -*- coding: utf8 -*-

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome('/usr/bin/chromedriver')
driver.get("http://www.cez.bg/bg/e-uslugi/avarii-remonti.html")
driver.switch_to.frame(driver.find_elements_by_tag_name('iframe')[0])
driver.find_element_by_id('searchField').send_keys('Перник')

for element in driver.find_elements_by_class_name('ui-btn'):
    print(element.text)

опитвам се така да го подкарам и не мога виш какви грешки ми дава

python chez.py
Traceback (most recent call last):
  File "chez.py", line 11, in <module>
    driver = webdriver.Chrome('/usr/bin/chromedriver')
  File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
    desired_capabilities=desired_capabilities)
  File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.4/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=2.41.578700 (2f1ed5f9343c13f73144538f15c00b370eda6706),platform=Linux 4.9.0-12-amd64 x86_64)


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 19, 2020, 00:33
Код:
from selenium import webdriver


options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('log-level=3')
options.add_experimental_option('excludeSwitches', ['enable-logging'])

chromedriver='C:/Storage/Bin/chromedriver.exe'

driver = webdriver.Chrome(chromedriver, options=options)

driver.get('http://www.cez.bg/bg/e-uslugi/avarii-remonti.html')
driver.switch_to.frame(driver.find_elements_by_tag_name('iframe')[0])
driver.find_element_by_id('searchField').send_keys('Перник')

for element in driver.find_elements_by_class_name('ui-btn'):
    print(element.text)

driver.quit()

Това работи при мен.
Windows 10
Има едно съобщение, което се появява преди населените места и което не можах да премахна - "Clear text".
Но това едва ли ще е проблем, тъй като ти евентуално ще искаш да кликнеш на някое от тях и чак тогава да вземеш инфото за евентуални проблеми.

Това получавам на изхода:
Код:
Clear text
ЛЕСКОВЕЦ, ОБЩ. ПЕРНИК
ЛЮЛИН, ОБЩ. ПЕРНИК
ПЕРНИК
ПЛАНИНИЦА, ОБЩ. ПЕРНИК
СТУДЕНА, ОБЩ. ПЕРНИК
ЧЕРНА ГОРА, ОБЩ. ПЕРНИК


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 19, 2020, 08:53
по принцип не искам да кликам а направо да ми изкара за дадения район от кога до кога няма да има ток ама май доста сложно става това нещо


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 19, 2020, 17:03
Това, което взимаме като информация тук, е онова, което се появява, когато напишеш някое по-голямо населено място. Пояляват се варианти. Ако напишеш София, вместо Перник, ще имаш още по-голям списък. И трябва да избереш единия и да кликнеш на него, за да се вземе информацията за конкретното място. Не е нищо сложно.

Във for цикъла, който е накрая, вместо да принтиш текста, само трябва да цъкнеш на елемента, ако текстът започва с това, което търсиш. Защо изкарвам списъка с всички имена, вместо просто да го направя? Ами защото човек може да не знае в кой район е или в кой район го води ЧЕЗ и просто да не се появи, въпреки, че е към ЧЕЗ.

Но в този случай, ако търсим Перник, във for цикъла просто трябва да се кликне върху първия елемент, при който текста започва с ПЕРНИК. Защото в останалите случаи Перник се явява район, а населеното място е на първо място. Което е удобно за нас.
Код:
from selenium import webdriver


options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('log-level=3')
options.add_experimental_option('excludeSwitches', ['enable-logging'])

chromedriver='C:/Storage/Bin/chromedriver.exe'

driver = webdriver.Chrome(chromedriver,
                          options=options)

driver.get('http://www.cez.bg/bg/e-uslugi/avarii-remonti.html')
driver.switch_to.frame(driver.find_elements_by_tag_name('iframe')[0])
driver.find_element_by_id('searchField').send_keys('Перник')


for element in driver.find_elements_by_class_name('ui-btn'):
    # print(element.text)
    if element.text.startswith('Перник'.upper()):
        element.click()
       
        status = driver.find_element_by_class_name('ui-body').text
        print(status)

Докато пишех това и тествах, се появи, че нямало да има ток в Находище Студена, Перник. Но докато се чудех, как да го реализирам, щото е структурирано смотано, оправиха проблема.
Записах обаче страницата и по-късно ще пробвам да измисля нещо.
И друго нещо. Изплюва някаква грешка, че намерения елемент не бил в DOM, което е тъпо, но това може да се игнорира.


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 20, 2020, 12:18
Здравейте, като го пусна скрипта ми изплюва тази грешка не мога да я оправа
#!/usr/bin/env python3.7

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

service = Service('/usr/bin/chromedriver')
driver.get('http://www.cez.bg/bg/e-uslugi/avarii-remonti.html')
driver.switch_to.frame(driver.find_elements_by_tag_name('iframe')[0])
driver.find_element_by_id('searchField').send_keys('Перник')

for element in driver.find_elements_by_class_name('ui-btn'):
    print(element.text)

driver.quit()

това е грешката
root@vasko-vps:/home/user# ./chez.py

Traceback (most recent call last):
  File "./chez.py", line 10, in <module>
    driver.get('http://www.cez.bg/bg/e-uslugi/avarii-remonti.html')
NameError: name 'driver' is not defined

Благодаря предварително.


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 20, 2020, 13:24
Ами то ти казва, каква е грешката.
driver не е дефинира. Няма такъв обект. Не си го създал. Ти създаваш service.
service = Service('/usr/bin/chromedriver')

И честно, не зная, защо го правиш. Никога не ми се е налагало да го ползвам това.
Ето какво е Service:

class Service(service.Service):
    """
    Object that manages the starting and stopping of the ChromeDriver
    """

В момента, в който стартираш скрипта, chromedriver почва да си бачка и накрая на скрипта можеш да сложиш едно driver.close() за да се затвори нормално и да не остават артефакти в паметта.


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 20, 2020, 15:25
ok


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 20, 2020, 16:10
root@vasko-vps:/home/user# python3.7 chez.py
Traceback (most recent call last):
  File "chez.py", line 12, in <module>
    driver.get('http://www.cez.bg/bg/e-uslugi/avarii-remonti.html')
NameError: name 'driver' is not defined


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 20, 2020, 16:11
Абе нещо не както трябва

#!/usr/bin/env python3

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

#service = Service('/usr/bin/chromedriver')

#driver = webdriver.Chrome(executable_path = r'/usr/bin/chromedriver')     
driver.get('http://www.cez.bg/bg/e-uslugi/avarii-remonti.html')
driver.switch_to.frame(driver.find_elements_by_tag_name('iframe')[0])
driver.find_element_by_id('searchField').send_keys('Перник')

for element in driver.find_elements_by_class_name('ui-btn'):
    print(element.text)

driver.quit()


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 20, 2020, 16:37
Абе нещо не както трябва

#!/usr/bin/env python3

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

#service = Service('/usr/bin/chromedriver')

#driver = webdriver.Chrome(executable_path = r'/usr/bin/chromedriver')     
driver.get('http://www.cez.bg/bg/e-uslugi/avarii-remonti.html')
driver.switch_to.frame(driver.find_elements_by_tag_name('iframe')[0])
driver.find_element_by_id('searchField').send_keys('Перник')

for element in driver.find_elements_by_class_name('ui-btn'):
    print(element.text)

driver.quit()
Отново правиш същото - не създаваш обекта driver.
Този ред #driver = webdriver.Chrome(executable_path = r'/usr/bin/chromedriver') ти е коментиран. А не би трябвало да е.


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 20, 2020, 17:15
Виш какво дава така
!/usr/bin/env python3

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

#service = Service('/usr/bin/chromedriver')

driver = webdriver.Chrome(executable_path = r'/usr/bin/chromedriver')     
driver.get('http://www.cez.bg/bg/e-uslugi/avarii-remonti.html')
driver.switch_to.frame(driver.find_elements_by_tag_name('iframe')[0])
driver.find_element_by_id('searchField').send_keys('Перник')

for element in driver.find_elements_by_class_name('ui-btn'):
    print(element.text)

driver.quit()
_________________________________________________________________________________
root@vasko-vps:/home/user# ./chez.py
Traceback (most recent call last):
  File "./chez.py", line 11, in <module>
    driver = webdriver.Chrome(executable_path = r'/usr/bin/chromedriver')     
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
    desired_capabilities=desired_capabilities)
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=2.41.578700 (2f1ed5f9343c13f73144538f15c00b370eda6706),platform=Linux 4.19.0-8-amd64 x86_64)


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 20, 2020, 19:16
Зададе ли му опции, както аз съм направил тук?
https://www.linux-bg.org/forum/index.php?topic=48551.msg313133#msg313133


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 21, 2020, 09:15
Нещо не става остави го благодаря ти все пак


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 21, 2020, 09:16
поне при мен не тръгва пак да ти кажа с линукс съм


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 21, 2020, 10:09
Виж какво ми връща нямам driver
>>> driver = webdriver.Chrome(executable_path = r'/usr/bin/chromedriver')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
    desired_capabilities=desired_capabilities)
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=2.41.578700 (2f1ed5f9343c13f73144538f15c00b370eda6706),platform=Linux 4.19.0-8-amd64 x86_64)


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 21, 2020, 14:14
Пробвай този скрипт, който ти дадох и по-нагоре и който странно защо ненужно изменяш.
Пробвай без да променяш нищо. Не би трябвало да зависи от операционната система.
Само там, където съм задал пътя до chromedriver можеш да си поставиш твоя.

Код:
from selenium import webdriver


options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('log-level=3')
options.add_experimental_option('excludeSwitches', ['enable-logging'])

chromedriver='C:/Storage/Bin/chromedriver.exe'

driver = webdriver.Chrome(chromedriver,
                          options=options)

driver.get('http://www.cez.bg/bg/e-uslugi/avarii-remonti.html')
driver.switch_to.frame(driver.find_elements_by_tag_name('iframe')[0])
driver.find_element_by_id('searchField').send_keys('Перник')


for element in driver.find_elements_by_class_name('ui-btn'):
    # print(element.text)
    if element.text.startswith('Перник'.upper()):
        element.click()
       
        status = driver.find_element_by_class_name('ui-body').text
        print(status)


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 21, 2020, 15:35
ето виж какво дава така
root@vasko-vps:/home/user# python3 test.py
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/common/service.py", line 76, in start
    stdin=PIPE)
  File "/usr/lib/python3.7/subprocess.py", line 775, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.7/subprocess.py", line 1522, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'C:/Storage/Bin/chromedriver.exe': 'C:/Storage/Bin/chromedriver.exe'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test.py", line 12, in <module>
    options=options)
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/chrome/webdriver.py", line 73, in __init__
    self.service.start()
  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/common/service.py", line 83, in start
    os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'chromedriver.exe' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home


Пробвай този скрипт, който ти дадох и по-нагоре и който странно защо ненужно изменяш.
Пробвай без да променяш нищо. Не би трябвало да зависи от операционната система.
Само там, където съм задал пътя до chromedriver можеш да си поставиш твоя.

Код:
from selenium import webdriver


options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('log-level=3')
options.add_experimental_option('excludeSwitches', ['enable-logging'])

chromedriver='C:/Storage/Bin/chromedriver.exe'

driver = webdriver.Chrome(chromedriver,
                          options=options)

driver.get('http://www.cez.bg/bg/e-uslugi/avarii-remonti.html')
driver.switch_to.frame(driver.find_elements_by_tag_name('iframe')[0])
driver.find_element_by_id('searchField').send_keys('Перник')


for element in driver.find_elements_by_class_name('ui-btn'):
    # print(element.text)
    if element.text.startswith('Перник'.upper()):
        element.click()
       
        status = driver.find_element_by_class_name('ui-body').text
        print(status)


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 22, 2020, 22:59
Ами казах ти да сложиш твоя път до chromedriver. Не да използваш моя.
Нали си го пъхнал в /usr/bin/


Титла: Re: Авариите на чез.
Публикувано от: jet в Feb 23, 2020, 00:11
На оная работа път ли и викате вече  ;D


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 23, 2020, 00:48
Така се получава  ;D


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Feb 24, 2020, 09:24
from selenium import webdriver


options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('log-level=3')
options.add_experimental_option('excludeSwitches', ['enable-logging'])

chromedriver='/usr/bin/chromedriver'

driver = webdriver.Chrome(chromedriver,
                          options=options)

driver.get('http://www.cez.bg/bg/e-uslugi/avarii-remonti.html')
driver.switch_to.frame(driver.find_elements_by_tag_name('iframe')[0])
driver.find_element_by_id('searchField').send_keys('Перник')


for element in driver.find_elements_by_class_name('ui-btn'):
    # print(element.text)
    if element.text.startswith('Перник'.upper()):
        element.click()
       
        status = driver.find_element_by_class_name('ui-body').text
        print(status)

Сега това дава
Traceback (most recent call last):
  File "chez.py", line 13, in <module>
    options=options)
TypeError: __init__() got an unexpected keyword argument 'options'



Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Feb 24, 2020, 15:02
Пробвай, да промениш този ред
Код:
driver = webdriver.Chrome(chromedriver,
                          options=options)
така:
Код:
driver = webdriver.Chrome(chromedriver,
                          chrome_options=options)

Ако аз използвам второто, ми излиза съобщение, че chrome_options е deprecated. Може да си инсталирал по-стара версия на Selenium.



Титла: Re: Авариите на чез.
Публикувано от: supportpc в Mar 02, 2020, 14:59
не става нещо
#!/usr/bin/env python3

from selenium import webdriver


options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('log-level=3')
options.add_experimental_option('excludeSwitches', ['enable-logging'])

chromedriver='/usr/bin/chromedriver'

driver = webdriver.Chrome(chromedriver,
                          chrome_options=options)
 

driver.get('http://www.cez.bg/bg/e-uslugi/avarii-remonti.html')
driver.switch_to.frame(driver.find_elements_by_tag_name('iframe')[0])
driver.find_element_by_id('searchField').send_keys('Перник')


for element in driver.find_elements_by_class_name('ui-btn'):
    # print(element.text)
    if element.text.startswith('Перник'.upper()):
        element.click()
       
        status = driver.find_element_by_class_name('ui-body').text
        print(status)


тово е грешката
Traceback (most recent call last):
  File "./chez.py", line 14, in <module>
    chrome_options=options)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
    desired_capabilities=desired_capabilities)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/chromium is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=73.0.3683.75,platform=Linux 4.9.0-12-amd64 x86_64)


Титла: Re: Авариите на чез.
Публикувано от: remotexx в Mar 02, 2020, 16:29
Не че съм експерт по питони, смоци и т.п. ама ето какво ми изплю търсачката за тази грешка -
  (unknown error: DevToolsActivePort file doesn't exist)

Код
GeSHi (Python):
  1. chromeOptions.add_argument("--remote-debugging-port=9222")

А в отговора има и др. пожелателни опции

https://stackoverflow.com/questions/56637973/how-to-fix-selenium-devtoolsactiveport-file-doesnt-exist-exception-in-python


Титла: Re: Авариите на чез.
Публикувано от: go_fire в Nov 19, 2020, 10:38
Днес се присетих за тази тема и по-точно за Selenum. И се сетих, че преди година време чух за поредната му алтернатива. Казва се Cypress – https://www.cypress.io/.

Тогава пича, който я препоръча, каза:

Цитат
Има изключително много възможности за тестване, само че не става за тестване на SalesForce. За всичко друго е супер и много по добре от Selenium според мене.

Сигурен съм, че професионалистите сте чували за кипариса, а някои дори сте го ползвали. Слагам го в темата само, защото по някое време почна „мерене на технологията“ и така да има още един вариант за пълнота.

Иначе Васко отдавна си е изпълнил задачата, ама това не пречи за друга случка.

Поздрави!


Титла: Re: Авариите на чез.
Публикувано от: PaperNick в Nov 19, 2020, 19:11
Днес се присетих за тази тема и по-точно за Selenum. И се сетих, че преди година време чух за поредната му алтернатива. Казва се Cypress – https://www.cypress.io/.

Тогава пича, който я препоръча, каза:

Цитат
Има изключително много възможности за тестване, само че не става за тестване на SalesForce. За всичко друго е супер и много по добре от Selenium според мене.

Бях чувал за Cypress, но не бях цъкал с него досега. Разписах проверките за аварии на ЧЕЗ и се получи доста добре.

Ето и кода:
Код
GeSHi (Javascript):
  1. const CEZ_BREAKDOWNS_URL = 'https://info.cez.bg/js/avarii/av1.php';
  2. const NO_BREAKDOWNS_ASSERT_MESSAGE = 'няма прекъсвания на захранването';
  3.  
  4. const populatedPlaces = [
  5.  { name:'Перник', fullMatch: false },
  6.  { name:'Кюстендил', fullMatch: false },
  7.  { name: 'Буново, общ. Кюстендил', fullMatch: true },
  8. ];
  9.  
  10. describe('CEZ Breakdowns', () => {
  11.  beforeEach(() => {
  12.    // https://docs.cypress.io/api/events/catalog-of-events.html#Examples
  13.    cy.on('uncaught:exception', (err, runnable) => {
  14.      // An "Uncaught ReferenceError: object is not defined" exception is thrown from CEZ webpage.
  15.      // Ignore it so that the execution can continue.
  16.      // Return false to prevent the error from failing the current test.
  17.      return false;
  18.    });
  19.  });
  20.  
  21.  function checkBreakdown(place, fullMatch) {
  22.    it(`should not have any breakdowns for "${place}"`, () => {
  23.      cy.visit(CEZ_BREAKDOWNS_URL);
  24.  
  25.      cy.get('#searchField').type(place);
  26.  
  27.      const searchValue = fullMatch ? place.toUpperCase() : new RegExp(`^${place.toUpperCase()}`);
  28.      const placeSuggestion = cy.get('#suggestions .ui-btn').contains(searchValue, { matchCase: true });
  29.  
  30.      placeSuggestion.should('have.length.greaterThan', 0);
  31.  
  32.      placeSuggestion.click();
  33.  
  34.      cy.get('[data-role="content"] .ui-body').should('contain', NO_BREAKDOWNS_ASSERT_MESSAGE);
  35.    });
  36.  }
  37.  
  38.  populatedPlaces.forEach(place => checkBreakdown(place.name, place.fullMatch));
  39. });
  40.  

Ето и как се пуска:
Код
GeSHi (Bash):
  1. mkdir cez_checker
  2. cd cez_checker/
  3. npm init --yes
  4. npm install cypress --save-dev
  5. echo '{}' > cypress.json
  6. mkdir -p cypress/integration
  7. touch cypress/integration/cez_breakdown_spec.js
  8.  
  9. # Поставете съдържанието на скрипта в "cypress/integration/cez_breakdown_spec.js"
  10.  
  11. npx cypress run --quiet

В браузъра се пуска с:
Код
GeSHi (Bash):
  1. npx cypress open

След изпълнението има дори видео запис :o
Код
GeSHi (Bash):
  1. $ ls cypress/videos/
  2. cez_breakdown_spec.js.mp4

А, да, трябва да инсталирате NodeJS ($2).


Титла: Re: Авариите на чез.
Публикувано от: go_fire в Nov 19, 2020, 19:18
Еха, Пейпър много яко. Сега разбирам думите на Алекс, че това е много добро.

Аз самия не го бях пробвал. Ама реално и Селениум не съм.

Страшен си!


Титла: Re: Авариите на чез.
Публикувано от: Demayl в Nov 23, 2020, 17:34
Ето едно примерче за София - Перник е с ид 149
Код
GeSHi (Bash):
  1. curl -d "city_id=153&page=1" -X POST https://info.cez.bg/js/avarii/contents.php | grep -oP '<span style="float:left;font-size:small">.*?<\/span>' | sed 's/<[^b][^<>]*>//g'


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Dec 08, 2020, 13:12
Как мога да го визуализирам в php,  пробвах с това shell-exec не става

Ето едно примерче за София - Перник е с ид 149
Код
GeSHi (Bash):
  1. curl -d "city_id=153&page=1" -X POST https://info.cez.bg/js/avarii/contents.php | grep -oP '<span style="float:left;font-size:small">.*?<\/span>' | sed 's/<[^b][^<>]*>//g'


Титла: Re: Авариите на чез.
Публикувано от: PaperNick в Dec 08, 2020, 15:01
Как мога да го визуализирам в php,  пробвах с това shell-exec не става

Ето едно примерче за София - Перник е с ид 149
Код
GeSHi (Bash):
  1. curl -d "city_id=153&page=1" -X POST https://info.cez.bg/js/avarii/contents.php | grep -oP '<span style="float:left;font-size:small">.*?<\/span>' | sed 's/<[^b][^<>]*>//g'

Не е нужно да използваш shell_exec, просто направи заявката от PHP.
Ето какво сътворих набързо използвайки регулярния израз на колегата:
Код
GeSHi (PHP):
  1. <?php
  2.  
  3. $SOFIA = 153;
  4. $PERNIK = 129;
  5. $NO_BREAKDOWNS_MESSAGE = 'няма прекъсвания на захранването';
  6.  
  7. $requestOptions = [
  8.    'http' => [
  9.        'method'=> 'POST',
  10.        'header' => 'Content-type: application/x-www-form-urlencoded',
  11.        'content' => http_build_query(['city_id' => $SOFIA, 'page' => 1])
  12.    ],
  13. ];
  14.  
  15. $context = stream_context_create($requestOptions);
  16. $fp = fopen('https://info.cez.bg/js/avarii/contents.php', 'r', false, $context);
  17. $pageContent = stream_get_contents($fp);
  18. fclose($fp);
  19.  
  20. if (strpos($pageContent, $NO_BREAKDOWNS_MESSAGE) !== false) {
  21.    echo 'Няма авария' . PHP_EOL;
  22. } else {
  23.    echo 'Има Авария' . PHP_EOL;
  24. }
  25.  
  26. $regionBreakdownPattern = '/<span style="float:left;font-size:small">(.*?)<\/span>/i';
  27. preg_match_all($regionBreakdownPattern, $pageContent, $breakdowns);
  28.  
  29. foreach ($breakdowns[1] as $breakdown) {
  30.    echo $breakdown . PHP_EOL;
  31. }

Голяма част от кода я взех директно от документацията:
  • https://www.php.net/manual/en/function.stream-context-create.php
  • https://www.php.net/manual/en/function.stream-get-contents.php
  • https://www.php.net/manual/en/function.preg-match-all.php

В София има авария в момента и ми изкарва това:
Цитат
Има Авария
жк.ХИПОДРУМА<br>СМИЛИЦА
жк.ХИПОДРУМА<br>ХИПОДРУМА
жк.ХИПОДРУМА<br>ПИРИНСКИ ИЗВОР
жк.ХИПОДРУМА<br>КЮСТЕНДИЛ/АТАНАС НЕНОВ/
жк.БАНИШОРА<br>БАНИШОРА
жк.БАНИШОРА<br>ГЕН. СТОЛЕТОВ
жк.БАНИШОРА<br>ИВАН ТУРГЕНЕВ

Edit: разписах го на PHP 7.2


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Dec 08, 2020, 16:20
А реално как ще стане със всички ID които има чез. Благодаря предварително

Как мога да го визуализирам в php,  пробвах с това shell-exec не става

Ето едно примерче за София - Перник е с ид 149
Код
GeSHi (Bash):
  1. curl -d "city_id=153&page=1" -X POST https://info.cez.bg/js/avarii/contents.php | grep -oP '<span style="float:left;font-size:small">.*?<\/span>' | sed 's/<[^b][^<>]*>//g'

Не е нужно да използваш shell_exec, просто направи заявката от PHP.
Ето какво сътворих набързо използвайки регулярния израз на колегата:
Код
GeSHi (PHP):
  1. <?php
  2.  
  3. $SOFIA = 153;
  4. $PERNIK = 129;
  5. $NO_BREAKDOWNS_MESSAGE = 'няма прекъсвания на захранването';
  6.  
  7. $requestOptions = [
  8.    'http' => [
  9.        'method'=> 'POST',
  10.        'header' => 'Content-type: application/x-www-form-urlencoded',
  11.        'content' => http_build_query(['city_id' => $SOFIA, 'page' => 1])
  12.    ],
  13. ];
  14.  
  15. $context = stream_context_create($requestOptions);
  16. $fp = fopen('https://info.cez.bg/js/avarii/contents.php', 'r', false, $context);
  17. $pageContent = stream_get_contents($fp);
  18. fclose($fp);
  19.  
  20. if (strpos($pageContent, $NO_BREAKDOWNS_MESSAGE) !== false) {
  21.    echo 'Няма авария' . PHP_EOL;
  22. } else {
  23.    echo 'Има Авария' . PHP_EOL;
  24. }
  25.  
  26. $regionBreakdownPattern = '/<span style="float:left;font-size:small">(.*?)<\/span>/i';
  27. preg_match_all($regionBreakdownPattern, $pageContent, $breakdowns);
  28.  
  29. foreach ($breakdowns[1] as $breakdown) {
  30.    echo $breakdown . PHP_EOL;
  31. }

Голяма част от кода я взех директно от документацията:
  • https://www.php.net/manual/en/function.stream-context-create.php
  • https://www.php.net/manual/en/function.stream-get-contents.php
  • https://www.php.net/manual/en/function.preg-match-all.php

В София има авария в момента и ми изкарва това:
Цитат
Има Авария
жк.ХИПОДРУМА<br>СМИЛИЦА
жк.ХИПОДРУМА<br>ХИПОДРУМА
жк.ХИПОДРУМА<br>ПИРИНСКИ ИЗВОР
жк.ХИПОДРУМА<br>КЮСТЕНДИЛ/АТАНАС НЕНОВ/
жк.БАНИШОРА<br>БАНИШОРА
жк.БАНИШОРА<br>ГЕН. СТОЛЕТОВ
жк.БАНИШОРА<br>ИВАН ТУРГЕНЕВ

Edit: разписах го на PHP 7.2


Титла: Re: Авариите на чез.
Публикувано от: PaperNick в Dec 08, 2020, 16:46
А реално как ще стане със всички ID които има чез. Благодаря предварително

Ми така като гледам, предложенията за градове ги взима от самата HTML без да прави други заявки:
Ако прегледаш изходния код на страницата https://info.cez.bg/js/avarii/av1.php ще видиш всички имена и id-та на ред 249:
Код:
autocompleteData = $.parseJSON('[{"value":"153","label":"СОФИЯ"}.....


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Dec 08, 2020, 17:01
Извинявай но не знам къде да ги добавя в кода.
А реално как ще стане със всички ID които има чез. Благодаря предварително

Ми така като гледам, предложенията за градове ги взима от самата HTML без да прави други заявки:
Ако прегледаш изходния код на страницата https://info.cez.bg/js/avarii/av1.php ще видиш всички имена и id-та на ред 249:
Код:
autocompleteData = $.parseJSON('[{"value":"153","label":"СОФИЯ"}.....


Титла: Re: Авариите на чез.
Публикувано от: PaperNick в Dec 08, 2020, 22:04
Извинявай но не знам къде да ги добавя в кода.

Няма да стане толкова просто, а и не знам какво точно искаш да постигнеш. CLI програмка ли искаш да си направиш или web страница?
Не мога да отделя повече време по проблема. Надявах се, че разбираш поне малко от програмиране и ще можеш да се оправиш сам след насоките.


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Dec 10, 2020, 15:18
Не мога да ги разбера и ЧЕЗ.
Предоставят някаква информация, справка... Едно елементарно API не са направили. А е толкова просто.


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Dec 11, 2020, 10:15
Искам на web interface да стане.


Титла: Re: Авариите на чез.
Публикувано от: go_fire в Dec 11, 2020, 10:22
Добре, като не се сещаш друг начин, тогава със сила (brute force). Взимаш всички тези от 249-и ред и ги вкарваш в масив. След това правиш цикъл и всичките ги изкарваш на мястото на София. Събираш резултата и пак от онзи масив взимаш кой е града. Сега нали не очакваш някой да си инсталира PHP, само, за да разпише това?


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Dec 11, 2020, 21:28
Въпросът е, че се опитва да ползва ресурс от друг сайт, но явно липсват достатъчно умения, за да обработи информацията в годен за сайта му вид.
Без знания по кодене няма да стане. Какъвто ще език да знаеш, все ще се оправиш и с почти всеки друг, особено пък от популярните.

Сайт без JS скоро не съм виждал. Поне това да се поназнайва, ако ще се прави сайтове. Но дори не е и поне. Задължително е.

@PaperNick направо го сдъфка и изплю готово


Титла: Re: Авариите на чез.
Публикувано от: go_fire в Dec 17, 2020, 11:32
В тази тема имаше известен брой мнения, които не са по нея.

Те не са изтрити, а преместени, тук:

Злословие или не  ($2)

Моля, ако някой смята, че има още какво да добави по нея, да го направи в новата тема.

Благодаря!


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Dec 17, 2020, 12:07
няма какво да я местиш по добре си провери информацията


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Dec 17, 2020, 12:16
вече никога не бих се наел да питам тука нещо май този форум го ползвате за клюкарник даже ще си изтрия юзъра не ми се занимава с глупаци и наздраве за хейтърите  [_]3 даже ме правят по силен и има къде по стилни форуми да попитам за инфо и няма лошо човек да пита ама вие сте от тези хора които няма да коментирам


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Dec 17, 2020, 22:02
вече никога не бих се наел да питам тука нещо май този форум го ползвате за клюкарник даже ще си изтрия юзъра не ми се занимава с глупаци и наздраве за хейтърите  [_]3 даже ме правят по силен и има къде по стилни форуми да попитам за инфо и няма лошо човек да пита ама вие сте от тези хора които няма да коментирам
Един път го казах, сега ще ти го повторя, но с повече уточнения. Ето в тази отговор ти го направиха. Сдъвкаха ти го и ти го изплюха готово ( както казах и преди ). Единствено ти остава да го приложиш.

https://www.linux-bg.org/forum/index.php?topic=48551.msg315496#msg315496

Не зная, какво повече искаш от това, да ти се даде готово...


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Dec 18, 2020, 09:47
това отдавна съм го направил просто гледам кой как мисли и как би го направил това е но не ми се влиза в подробности защо съм изкъл да видя кой как мислите но в този малоумен форум никога не бих питал за нещо щом си вярваме на някакви новорегистрирали
вече никога не бих се наел да питам тука нещо май този форум го ползвате за клюкарник даже ще си изтрия юзъра не ми се занимава с глупаци и наздраве за хейтърите  [_]3 даже ме правят по силен и има къде по стилни форуми да попитам за инфо и няма лошо човек да пита ама вие сте от тези хора които няма да коментирам
Един път го казах, сега ще ти го повторя, но с повече уточнения. Ето в тази отговор ти го направиха. Сдъвкаха ти го и ти го изплюха готово ( както казах и преди ). Единствено ти остава да го приложиш.

https://www.linux-bg.org/forum/index.php?topic=48551.msg315496#msg315496

Не зная, какво повече искаш от това, да ти се даде готово...


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Dec 18, 2020, 12:23
и никой от вас не знае възможностите за да ме съди наздраве за хейтърите  [_]3


Титла: Re: Авариите на чез.
Публикувано от: jet в Dec 18, 2020, 16:11
Иди в някой не-малоумен форум да се оплачеш и там ще ти напишат кода. Ако форума си го бива даже ще те научат и теб да кодиш.


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Dec 18, 2020, 16:54
много преди теб съм се научил повярвай ми  ^-^
Иди в някой не-малоумен форум да се оплачеш и там ще ти напишат кода. Ако форума си го бива даже ще те научат и теб да кодиш.


Титла: Re: Авариите на чез.
Публикувано от: ray в Dec 18, 2020, 18:56
това отдавна съм го направил просто гледам кой как мисли и как би го направил това е но не ми се влиза в подробности защо съм изкъл да видя кой как мислите но в този малоумен форум никога не бих питал за нещо щом си вярваме на някакви новорегистрирали
вече никога не бих се наел да питам тука нещо май този форум го ползвате за клюкарник даже ще си изтрия юзъра не ми се занимава с глупаци и наздраве за хейтърите  [_]3 даже ме правят по силен и има къде по стилни форуми да попитам за инфо и няма лошо човек да пита ама вие сте от тези хора които няма да коментирам
Един път го казах, сега ще ти го повторя, но с повече уточнения. Ето в тази отговор ти го направиха. Сдъвкаха ти го и ти го изплюха готово ( както казах и преди ). Единствено ти остава да го приложиш.

https://www.linux-bg.org/forum/index.php?topic=48551.msg315496#msg315496

Не зная, какво повече искаш от това, да ти се даде готово...

Без да искам да те обиждам, но като гледам дългото изречение (без запетаи) което си написал, плюс думата "изкъл" (която не можах да намеря в речника), надявам се да е само техническа грешка.
Та си мисля, че човек първо се научава да чете и пише сравнително правилно и чак после да "коди", но е възможно да съществуват и изключения !


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Dec 19, 2020, 18:42
не ми се коментира няма да си губя и времето с теб :)  [_]3
това отдавна съм го направил просто гледам кой как мисли и как би го направил това е но не ми се влиза в подробности защо съм изкъл да видя кой как мислите но в този малоумен форум никога не бих питал за нещо щом си вярваме на някакви новорегистрирали
вече никога не бих се наел да питам тука нещо май този форум го ползвате за клюкарник даже ще си изтрия юзъра не ми се занимава с глупаци и наздраве за хейтърите  [_]3 даже ме правят по силен и има къде по стилни форуми да попитам за инфо и няма лошо човек да пита ама вие сте от тези хора които няма да коментирам
Един път го казах, сега ще ти го повторя, но с повече уточнения. Ето в тази отговор ти го направиха. Сдъвкаха ти го и ти го изплюха готово ( както казах и преди ). Единствено ти остава да го приложиш.

https://www.linux-bg.org/forum/index.php?topic=48551.msg315496#msg315496

Не зная, какво повече искаш от това, да ти се даде готово...

Без да искам да те обиждам, но като гледам дългото изречение (без запетаи) което си написал, плюс думата "изкъл" (която не можах да намеря в речника), надявам се да е само техническа грешка.
Та си мисля, че човек първо се научава да чете и пише сравнително правилно и чак после да "коди", но е възможно да съществуват и изключения !


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Dec 20, 2020, 14:05
Ако ще сме откровени и аз да си кажа...
Ако можеше да кодиш, щеше и сам да го направиш, защото изпращането на уеб заявка е елементарно. Взимането на определени резултати и обработката им по подходящ за нуждите ти начин също не е нещо особено. Но ти казваш, че можеш, въпреки, че не можеше да разбереш подсказките ми в началото. Дори не разбра, накъде искам да те насоча.


Титла: Re: Авариите на чез.
Публикувано от: Naka в Dec 20, 2020, 14:30
Повече интриги, драми, разобличения!
Моля продължавайте.


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Dec 20, 2020, 17:48
Ще ви оставят да се развивате. Наистина форума е ташак като сте толкова сигурни, защо не го накарате да докаже много сте жалки. Не мога да повярвам, че има толкова наивни хора и като този клюкар Naka важно е и тои да е в разговора но не знае за какво става въпрос а ти 4096 по добре не коментираи. Твоето мнение не ме вълнува, просто не знаеш защо съм тук и какво търся и кой търся.


Титла: Re: Авариите на чез.
Публикувано от: jet в Dec 20, 2020, 18:16
С твоите 138 поста си мислиш, че познаваш някои с над 3500, които са във форума от десетилетия.
В твоите постчета не си дал дори едно решение на проблем, а само рИване, си тръгнал да се плюнчиш точно с Нака-та.


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Dec 20, 2020, 18:41
Принципно не ми се занимава вече с вас. Видях ви какви пу*****ки сте. Утре като напишат за теб така, да видя как ще се чустваш, а всъщност не е вярно това което са написали и ако обича модератора да изтре темата.
С твоите 138 поста си мислиш, че познаваш някои с над 3500, които са във форума от десетилетия.
В твоите постчета не си дал дори едно решение на проблем, а само рИване, си тръгнал да се плюнчиш точно с Нака-та.


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Dec 20, 2020, 18:45
Хайде лека вечер, и останем всички с здраве даже и хейтърите като вас


Титла: Re: Авариите на чез.
Публикувано от: 4096bits в Dec 20, 2020, 19:04
Кой търсиш? Тук вече стана интересно.  :D

Все ми е едно, какво ще ми кажеш. Опитах да те накарам, да си използваш сивото, но ти отказа. В един форум за програмиране съм се нагледал на достачъно такива. Очакват да им изплюеш готовия отговор просто така.
Коденето не е проблем за никого и всеки може да се научи да пише код. Това е просто синтаксис. Разрешаването на проблем, да го разбиеш на малки стъпки и така да си свършиш работата, това е програмиране. И не ми пука, дали ще се обиждаш, засягаш или каквото и да е. Не те познавам. Само ще ти кажа, ащо ще правиш уеб страници, за собствени нужди или нещо друго, без програмиране няма стане. Можеш да пишеш тук, че кодиш, но това никого не го интересува. Просто се научи да го правиш. Не са заяждам, не искам да те обиждам, не искам да те убеждавам в нещо. Нещо като съвет.

Javascript е може би най-използвания "език". Независимо от операционната система, все ще има браузър. А браузърите все още ползват JS.


Титла: Re: Авариите на чез.
Публикувано от: supportpc в Dec 20, 2020, 19:21
Пожелавам на всички весело посрещане на предстоящите празници!
Нека всички в тези дни помислим и направим равносметка за изминалият път през годината, а също така да се изпълним с надежда за бъдещето.
Бъдете здрави, щастливи и усмихнати.