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