Автор Тема: Авариите на чез.  (Прочетена 2999 пъти)

supportpc

  • Напреднали
  • *****
  • Публикации: 117
    • Профил
Re: Авариите на чез.
« Отговор #30 -: Feb 14, 2020, 12:37 »
добре ще го тествам
Колега благодаря все пак че отдели време за мен  ще го тествам
Не съм колега, защото това ми е хоби и го ползвам да си улеснявам живота.

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

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

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

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

4096bits

  • Напреднали
  • *****
  • Публикации: 3391
    • Профил
Re: Авариите на чез.
« Отговор #31 -: Feb 14, 2020, 12:39 »
А бе тоя водач, не беше ли си част от дистрибуцията на Google Chromium? Или говориш да го лашка на сървъра?

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

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



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

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 5512
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Авариите на чез.
« Отговор #32 -: Feb 14, 2020, 12:51 »
Скоро някой (дали не беше p4p), сложи тук една програмка на Gо за команден ред, дето ти тараши DOM и спестява цялата галимация с js. Макар, че с нея няма как да „цъкаш“. Там просто се извлича, каквото трябва и ти го изплюва. Твоя работа е, какво ще го правиш.
« Последна редакция: Feb 14, 2020, 12:54 от go_fire »
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

4096bits

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

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

kingfisher

  • Напреднали
  • *****
  • Публикации: 92
    • Профил
Re: Авариите на чез.
« Отговор #34 -: Feb 14, 2020, 13:20 »
https://github.com/ericchiang/pup
Активен

4096bits

  • Напреднали
  • *****
  • Публикации: 3391
    • Профил
Re: Авариите на чез.
« Отговор #35 -: Feb 14, 2020, 13:55 »
Супер! Благодаря!

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

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 5512
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Авариите на чез.
« Отговор #36 -: Feb 14, 2020, 14:26 »
Този е, благодаря Кинг Фишер!

Изрових го:

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

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

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

4096bits

  • Напреднали
  • *****
  • Публикации: 3391
    • Профил
Re: Авариите на чез.
« Отговор #37 -: Feb 14, 2020, 15:35 »
Има го и този проект на Гугъл, но инсталацията му е почти 300 мегабайта. Отново контролира Хром.
Може да прави благинки като да произведе PDF от отделен DOM елемент. Например директно картинка, парче параграф или каквото ще да е.
Обаче е за Node.js

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

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

remotexx

  • Напреднали
  • *****
  • Публикации: 857
    • Профил
Re: Авариите на чез.
« Отговор #38 -: Feb 14, 2020, 17:41 »
и моите 5 ст.

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

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

4096bits

  • Напреднали
  • *****
  • Публикации: 3391
    • Профил
Re: Авариите на чез.
« Отговор #39 -: Feb 14, 2020, 20:41 »
Не си мерим езиците. Аз искам да понауча JS, понеже искам да направя някои нещица на D3.js. Без основите няма да стане. Ajax, рендване на данни в страницата и подобни. И с Go бях започнал да се заигравам по едно време. Ма не съм сядал да кодя от има шест месеца поне.
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

supportpc

  • Напреднали
  • *****
  • Публикации: 117
    • Профил
Re: Авариите на чез.
« Отговор #40 -: 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)


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

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

Предполагам, че това е достатъчно инфо, за да продължиш.
« Последна редакция: Feb 16, 2020, 10:47 от supportpc »
Активен

spec1a

  • Напреднали
  • *****
  • Публикации: 1118
    • Профил
Re: Авариите на чез.
« Отговор #41 -: Feb 16, 2020, 11:36 »
   Преди време коментирахме проблемите с версиите на питона.
Като за начало,напиши какво ти дава командата:

ls -l /usr/bin/python*
Активен

4096bits

  • Напреднали
  • *****
  • Публикации: 3391
    • Профил
Re: Авариите на чез.
« Отговор #42 -: Feb 16, 2020, 12:32 »
Selenium и PhantomJS ги няма вградени в Python.
Трябва да се инсталират отделно.

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

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

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

pip install Selenium


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

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

Горния линк е на испански, щото си бях превключил клавиатурата и тъпата търсачка е задала някакви параметри. Ма го има и можеш през apt да си го инсталираш
« Последна редакция: Feb 16, 2020, 14:38 от 4096bits »
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

supportpc

  • Напреднали
  • *****
  • Публикации: 117
    • Профил
Re: Авариите на чез.
« Отговор #43 -: 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)
Активен

4096bits

  • Напреднали
  • *****
  • Публикации: 3391
    • Профил
Re: Авариите на чез.
« Отговор #44 -: 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
ЛЕСКОВЕЦ, ОБЩ. ПЕРНИК
ЛЮЛИН, ОБЩ. ПЕРНИК
ПЕРНИК
ПЛАНИНИЦА, ОБЩ. ПЕРНИК
СТУДЕНА, ОБЩ. ПЕРНИК
ЧЕРНА ГОРА, ОБЩ. ПЕРНИК
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.