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

supportpc

  • Гост
Re: Авариите на чез.
« Отговор #45 -: Feb 19, 2020, 08:53 »
по принцип не искам да кликам а направо да ми изкара за дадения район от кога до кога няма да има ток ама май доста сложно става това нещо
Активен

4096bits

  • Напреднали
  • *****
  • Публикации: 6152
    • Профил
Re: Авариите на чез.
« Отговор #46 -: 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, което е тъпо, но това може да се игнорира.
Активен

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

supportpc

  • Гост
Re: Авариите на чез.
« Отговор #47 -: 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

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

4096bits

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

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

supportpc

  • Гост
Re: Авариите на чез.
« Отговор #49 -: Feb 20, 2020, 15:25 »
ok
Активен

supportpc

  • Гост
Re: Авариите на чез.
« Отговор #50 -: 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
Активен

supportpc

  • Гост
Re: Авариите на чез.
« Отговор #51 -: 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()
Активен

4096bits

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

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

supportpc

  • Гост
Re: Авариите на чез.
« Отговор #53 -: 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)
Активен

4096bits

  • Напреднали
  • *****
  • Публикации: 6152
    • Профил
Re: Авариите на чез.
« Отговор #54 -: Feb 20, 2020, 19:16 »
Зададе ли му опции, както аз съм направил тук?
https://www.linux-bg.org/forum/index.php?topic=48551.msg313133#msg313133
Активен

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

supportpc

  • Гост
Re: Авариите на чез.
« Отговор #55 -: Feb 21, 2020, 09:15 »
Нещо не става остави го благодаря ти все пак
Активен

supportpc

  • Гост
Re: Авариите на чез.
« Отговор #56 -: Feb 21, 2020, 09:16 »
поне при мен не тръгва пак да ти кажа с линукс съм
Активен

supportpc

  • Гост
Re: Авариите на чез.
« Отговор #57 -: 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)
Активен

4096bits

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

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

supportpc

  • Гост
Re: Авариите на чез.
« Отговор #59 -: 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)
Активен