• Проверить текст на модальном окне и закрыть его (Selenium Python)?

    byxo-cyze
    @byxo-cyze
    Спасаю мир.
    Я надеюсь, это является popup:
    index.html

    <!DOCTYPE html>
    <html>
    
    	<head><title>Popup</title></head>
    
    	<body>
    		<div> Hello, World! </div>
    
    		<button id="myBtn">Открыть окно</button>
    
    
    <div id="myModal" class="modal">
    
    
      <div class="modal-content">
        <div class="modal-header">
          <span class="close">&times;</span>
          <h2>Шапка модального окна</h2>
        </div>
        <div class="modal-body">
          <p>Какой-то текст в теле модального окна</p>
          <p>Ещё другой текст...</p>
        </div>
        <div class="modal-footer">
          <h3>Футер модального окна</h3>
        </div>
      </div>
    
    </div>
    
    
    	</body>	
    
    <style>
    body {font-family: Arial, Helvetica, sans-serif;}
    
    #myBtn {
      background-color: #9C27B0;
      color: white;
      padding: 12px 16px;
      font-size: 18px;
      font-weight: bold;
      border: none;
      cursor: pointer;
      width: 180px;
    }
    
    
    .modal {
        display: none; /* Hidden by default */
        position: fixed; /* Stay in place */
        z-index: 1; /* Sit on top */
        padding-top: 100px; /* Location of the box */
        left: 0;
        top: 0;
        width: 100%; /* Full width */
        height: 100%; /* Full height */
        overflow: auto; /* Enable scroll if needed */
        background-color: rgb(0,0,0); /* Fallback color */
        background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
    }
    
    
    .modal-content {
        position: relative;
        background-color: #E1BEE7;
        margin: auto;
        padding: 0;
        border: 5px solid #7B1FA2;
        width: 50%;
        box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);
        -webkit-animation-name: animatetop;
        -webkit-animation-duration: 0.4s;
        animation-name: animatetop;
        animation-duration: 0.4s
    }
    
    
    @-webkit-keyframes animatetop {
        from {top:-300px; opacity:0} 
        to {top:0; opacity:1}
    }
    
    @keyframes animatetop {
        from {top:-300px; opacity:0}
        to {top:0; opacity:1}
    }
    
    
    .close {
        color: white;
        float: right;
        font-size: 28px;
        font-weight: bold;
    }
    
    .close:hover,
    .close:focus {
        color: #000;
        text-decoration: none;
        cursor: pointer;
    }
    
    .modal-header {
        padding: 2px 16px;
        background-color: #9C27B0;
        color: white;
    }
    
    .modal-body {padding: 2px 16px;}
    
    .modal-footer {
        padding: 2px 16px;
        background-color: #9C27B0;
        color: white;
    }
    </style>
    	<script>
    
    		var modal = document.getElementById('myModal');
    
    
    var btn = document.getElementById("myBtn");
    
    
    var span = document.getElementsByClassName("close")[0];
    
    
    btn.onclick = function() {
        modal.style.display = "block";
    }
    
    
    span.onclick = function() {
        modal.style.display = "none";
    }
    
    
    window.onclick = function(event) {
        if (event.target == modal) {
            modal.style.display = "none";
        }
    }
    	</script>
    
    </html>



    Парсер

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    driver = webdriver.Firefox()
    driver.get("http://localhost:5000")
    
    
    driver.find_element_by_id('myBtn').click()
    
    time.sleep(1)
    
    text = driver.find_element_by_class_name('modal-body').text
    assert 'Какой-то текст' in text
    
    driver.find_element_by_class_name('close').click()
    
    input()
    driver.close()

    Ответ написан
    Комментировать
  • Вопросик по бот-погода Телеграм на Python?

    byxo-cyze
    @byxo-cyze
    Спасаю мир.
    Достаточно добавить except ...

    import pyowm
    import telebot
    
    # от блокировок
    # from telebot import apihelper
    # apihelper.proxy = {'https':'socks5://127.0.0.1:9050'}
    
    owm=pyowm.OWM('df1....51', language = 'ru')
    
    bot = telebot.TeleBot('106...ilQ')
    
    @bot.message_handler(content_types=['text'])
    def send_echo(message):
      try:
        observation = owm.weather_at_place(message.text)
        w = observation.get_weather()
        temp=w.get_temperature('celsius')['temp']
    
        answer = f"В городе {message.text} сейчас {w.get_detailed_status()} \n"
        answer += f"Температура в районе {round(temp)} градусов\n\n"
    
        if temp<10:
          answer += 'Очень холодно, оденься потеплее))'
        elif temp<17:
          answer += 'Прохладно, лучше оденься:)'
        else:
          answer += 'Не холодно, хоть в трусах иди:)'
    
        bot.send_message(message.chat.id, answer)
      except pyowm.exceptions.api_response_error.NotFoundError:
          bot.send_message(message.chat.id, 'Город не найден :(')
          
    
    bot.polling(none_stop = True)
    Ответ написан
    1 комментарий
  • Почему ошибка 403 при скачивании видео?

    byxo-cyze
    @byxo-cyze
    Спасаю мир.
    wget.download не использует user-agent, поэтому сайт запрещает скачивать файл.

    from bs4 import BeautifulSoup
    import requests
    url='https://jut.su/jojo-bizarre-adventure/season-1/episode-16.html'
    
    headers = {
                'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0'
            }
    
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.content, 'html.parser')
    
    sources = soup.find_all('source', src=True)
    
    with requests.get(sources[0]['src'], headers=headers, stream=True) as r:
            r.raise_for_status()
            with open("JOJO.mp4", 'wb') as f:
                for chunk in r.iter_content(chunk_size=8192): 
                    if chunk: 
                        f.write(chunk)
    Ответ написан
    1 комментарий
  • Как улучшить алгоритм?

    byxo-cyze
    @byxo-cyze
    Спасаю мир.
    Я не умею описывать алгоритмы, но я попытался. Можно уменьшить кол-во map-ов, мне так удобнее.
    Алгоритм

    1. Создаем map, который содержит максмальное кол-во сделок в одну минуту. - result и map текущий результат - current_result.
    Создаем map, который содержит первоначальное время. - times (изначальное 0)
    2. Считываем одну строку, получаем time и exchange
    3. Если times.time + 60 > time ( если первоначальное время в секундах + 60 меньше текущего времени),
    тогда current_result.result++;
    Иначе
    result.result = max(result.result, current_result.result) ( определение макисмального результата)
    times.time = time (текущее время становится первоначальным)
    current_result.result = 1 (сейчас в минутном окне 1 сделка)
    4. goto 2.
    5. Вывести отсортированный result.
    Ответ написан
    Комментировать