Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from libs_voice import *
- driver=0
- previous_message = None
- try:
- option= get_option()
- driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()),
- options=option)
- driver.set_window_size(553, 357) # optiol
- driver.get("https://alice.yandex.ru/chat/01938823-14ea-4000-bd7a-3cca57830d6a/")# открыть сайт
- # driver.set_window_position(1, 505)
- # Размер окна: Ширина = 693, Высота = 407
- # Координаты окна: X = 662, Y = 292
- # print(counts)
- excluded_phrases = [
- "С чего начнём?Нарисовать картинку",
- "Для звонков телефон как-то удобнее, давайте попробую там.",
- "Яндекс — с АлисойБыстрый поиск и Алиса всегда рядомПоиск текстом, картинкой или голосомУмная",
- "Три заветных слова: мобильное приложение Яндекса. Там такое наверняка можно сделать."
- ] # input() # Получение текущего адреса страницы
- # Даём странице время загрузиться
- driver.implicitly_wait(5)
- # Находим все кнопки с классом chat-list-item__chat svelte-tfr5dl
- buttons = driver.find_elements(By.CSS_SELECTOR, "button.chat-list-item__chat.svelte-tfr5dl")
- buttons[0].click()
- button = WebDriverWait(driver, 5).until(
- EC.element_to_be_clickable((By.CSS_SELECTOR, 'div[aria-label="Алиса, начни слушать"]'))
- )
- button.click()
- # html_content = driver.page_source
- # with open('page_content.html', 'w', encoding='utf-8') as file:
- # file.write(html_content)
- driver.execute_script("document.querySelector('.standalone__header').style.display='none';")
- driver.execute_script(
- "var element = document.querySelector('.standalone__sidebar'); element.parentNode.removeChild(element);")
- url = driver.current_url
- lottie = driver.find_element(By.CSS_SELECTOR, '[data-testid="oknyx-lottie-listening"]')
- # JavaScript для поиска активного <svg> и группы <g>
- script = """
- const lottie = document.querySelector('[data-testid="oknyx-lottie-listening"]');
- const activeSvg = Array.from(lottie.querySelectorAll('svg')).find(svg =>
- !svg.classList.contains('animation-hidden') && svg.style.display !== 'none'
- );
- if (activeSvg) {
- const activeGroup = Array.from(activeSvg.querySelectorAll('g[filter]')).find(g =>
- g.style.display !== 'none'
- );
- if (activeGroup) {
- const filterAttr = activeGroup.getAttribute('filter');
- const match = filterAttr.match(/#__lottie_element_(\\d+)/);
- return match ? parseInt(match[1]) : null;
- }
- }
- return null;
- """
- def get_last_three_messages(driver, class_name):
- # Найти все элементы с заданным классом
- messages = driver.find_elements(By.CLASS_NAME, class_name)
- # Получить текст последних трех элементов
- last_three_messages = [message.text.strip() for message in messages[-3:]]
- return last_three_messages
- def get_latest_message(driver, previous_message="", len_c=0):
- try:
- ms = driver.find_elements(By.CLASS_NAME, 'message-bubble')
- counts = len(ms)
- ms = driver.find_elements(By.CLASS_NAME, 'message-bubble_container_from-user')
- # print( ms[-1].text.strip())
- # print( ms[-1].find_element(By.CLASS_NAME, 'markdown-text').text.strip())
- # print("user")
- # ms = driver.find_elements(By.CLASS_NAME, 'message-bubble_container_from-user')
- think= driver.find_element(By.CLASS_NAME, "chat__thinking")
- ms = get_last_three_messages(driver, 'message-bubble_container_from-user')# Это все мои сообщения только от меня
- print(ms)
- previous_message = ms[-1]
- if previous_message and think.is_displayed():#
- return previous_message, counts
- else:
- ms = get_last_three_messages(driver, 'message-bubble')
- print(ms)
- previous_message = ms[-2]
- if counts % 2 == 0 and previous_message:
- previous_message = ""
- return previous_message, counts
- else:
- previous_message = ""
- return previous_message, counts
- except NoSuchElementException as ex:
- return previous_message, len_c
- except Exception as ex: # Обработка неожиданных ошибок
- # print(f"Произошла непредвиденная ошибка: {ex}")
- pass #
- previous_message, counts = get_latest_message(driver)
- while True:
- try:
- # time.sleep(0.33) # Найдите кнопку микрофона
- mic_button = driver.find_element(By.CSS_SELECTOR, 'div.yamb-oknyx') # Получите значение aria-label
- aria_label = mic_button.get_attribute('aria-label') # Проверяем, активен ли микрофон # print( counts1)
- current_url = driver.current_url # Получение текущего адреса страницы
- if url not in current_url: # Проверка, содержится ли в адресе строка "/alice.yandex.ru/chat/" # Переход на нужный URL
- driver.get(url)
- pass
- if 'Алиса, стоп' in aria_label:# print("on")
- previous_message1, counts1 = get_latest_message(driver, previous_message, counts)
- if (counts1 > counts and len(previous_message1) !=0 and not any(phrase in previous_message1 for phrase in excluded_phrases)):
- print("+++++++")
- counts=counts1 # break
- thread = threading.Thread(target=process_text, args=(previous_message1, k,)) # break #
- #thread.daemon
- thread.start()
- thread.join()
- else: # print("ло")
- button.click()
- # Находим активный <svg> (без класса animation-hidden и без display: none)
- # Выполняем скрипт и получаем результат
- # number = driver.execute_script(script)
- except Exception as ex2:
- # print(ex2)
- pass
- t1 = threading.Thread(target=a)
- t1.start()
- except Exception as ex1:
- pass # print(number)
- # Находим элемент по data-testid
- # Проверяем активный <svg>
- # for svg in svg_elements:
- # class_attr = svg.get_attribute('class')
- # style_attr = svg.get_attribute('style')
- # if 'animation-hidden' not in class_attr and 'display: none' not in style_attr:
- # inner_html = svg.get_attribute('innerHTML')
- # print(inner_html)
- # if '<circle' in inner_html:
- # print("Текущее состояние: пульсирующий кружочек")
- # # Получение размера окна
- # window_size = driver.get_window_size()
- # width = window_size['width']
- # height = window_size['height']
- # print(f"Размер окна: Ширина = {width}, Высота = {height}")
- #
- # # Получение координат окна
- # window_position = driver.get_window_position()
- # x = window_position['x']
- # y = window_position['y']
- # print(f"Координаты окна: X = {x}, Y = {y}")
- # for message in messages:
- # print("Элемент найден:", message.get_attribute("outerHTML"))
- # think = driver.find_element(By.CLASS_NAME, "animation-hidden")
- # print("Элемент найден:", think.get_attribute("outerHTML"))
- # print("Элемент 'chat__thinking' найден.")
- # # Получаем и выводим все атрибуты
- # print("HTML:", think.get_attribute("outerHTML"))
- # print("Классы:", think.get_attribute("class"))
- # print("Стили:", think.get_attribute("style"))
- # print("Видим ли:", think.is_displayed())
- # if counts % 2 == 0 and counts != 0: # Если текста напрямую нет, ищем вложенный элемент с классом markdown-text
- # time.sleep(2.82)
- # user_messages = driver.find_elements(By.CLASS_NAME, "message-bubble_container_from-user")
- # previous_message1 = user_messages[-1].find_element(By.CLASS_NAME, "message-bubble").text
- #
- # messages = driver.find_elements(By.CLASS_NAME, 'message-bubble_container_from-user')
- # counts = len(messages)
- # if previous_message != previous_message1:
- # time.sleep(1.12)
- # return "", len_c
- # else:
- # return previous_message1, counts
- # # Ищем все элементы <button>
- # buttons = driver.find_elements(By.TAG_NAME, "button")
- #
- # # Ищем все кликабельные элементы <a> (если они тоже могут быть кнопками)
- # links = driver.find_elements(By.TAG_NAME, "a")
- # Ожидаем, пока кнопка переключения режима станет доступной и кликаем
- # wait = WebDriverWait(driver, 4)
- # switch_button = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "model-switcher__button")))
- # switch_button.click()
- #
- # wait = WebDriverWait(driver, 4)
- # basic_mode_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(., 'Базовый режим')]")))
- # basic_mode_button.click()
- # Ищем все кнопки с классом "chat-list-item__chat svelte-tfr5dl"
- # buttons = driver.find_elements(By.CLASS_NAME, "chat-list-item__chat")
- # Выводим полный список кнопок
- # print("Найденные кнопки с классом 'chat-list-item__chat svelte-tfr5dl':")
- # for i, button in enumerate(buttons, 1): # Получаем текст кнопки (если есть)
- # button_text = button.text.strip() if button.text.strip() else "Без текста"
- # # Получаем HTML-код элемента
- # button_code = button.get_attribute("outerHTML")
- # print(f"Кнопка {i}: Текст - {button_text}, HTML - {button_code}")
- # if i == 2: # Сравниваем с номером кнопки # Кликаем на сам элемент button (а не на его HTML-код)
- # button.click() # Ждём появления кнопки "Удалить"
- # try:
- # b= driver.find_element(By.CSS_SELECTOR, "button.chat-list-item__more-btn.svelte-tfr5dl")
- # # print(f" Код кнопки '3 точки': {b.get_attribute('outerHTML')}\n")
- # # Кликаем на "3 точки"
- # b.click()
- # except:
- # print("Кнопка 'Удалить' не найдена в течение 10 секунд.")
- # break # Выходим из цикла после обработки 144-й кнопки
- # Ищем кнопку с нужным текстом и нажимаем на нее
- # for button in buttons:
- # print(button)
- # if button.text == "напиши пожалуйста какие из этих пакетов надо установить и каких":
- # button.click()
- # break # Выходим из цикла после нажатия на нужную кнопку
- # # Проходим по каждой кнопке и нажимаем на нее
- # for button in buttons:
- # button_text = button.text.strip() if button.text.strip() else "Без текста"
- # # Получаем HTML-код элемента
- # button_code = button.get_attribute("outerHTML")
- # print(f"Кнопка {button}: Текст - {button_text}, HTML - {button_code}")
- # try:
- # think = WebDriverWait(driver, 2).until(
- # EC.presence_of_element_located((By.CLASS_NAME, "chat__thinking"))
- # )
- # except TimeoutException:
- # print("Элемент с классом 'chat__thinking' не найден за 10 секунд.")
- # think = driver.find_element(By.CLASS_NAME, "animation-hidden")
- # Если элемент 'chat__thinking' не найден за 10 секунд
- # if len(messages) % 2 == 0 and len(messages) != 0:
- # print("2")
- # previous_message = messages[-2].text.strip()
- # if previous_message:
- # user_messages = soup.find_all("div", class_="chat__message")
- # print(user_messages.get_text(strip=True))
- # messages1 = soup.find_all('div', class_='message-bubble_container')
- # На случай, если что-то пошло не так с другими элементами
- # print(f"Ошибка поиска элемента: {ex}")
- # messages = soup.find_all('div', class_='message-bubble')
- # counts = len(messages)
- # user_messages = soup.find_all("div", class_="message-bubble_container_from-user")
- # think = driver.find_element(By.CLASS_NAME, "chat__thinking")
- # previous_message = user_messages[-1].find('div', class_='message-bubble').get_text(strip=True)
- # if think and user_messages: # Если сообщения найдены, берем последнее
- # user_messages = soup.find_all("div", class_="chat__message")
- # if user_messages: # Если сообщения найдены, берем последнее
- # p = user_messages[-1].text.strip()
- # print(p)
- # messages1 = soup.find_all('div', class_='message-bubble_container')
- # if messages1:
- # if 'message-bubble_container_from-user' not in messages1[-1].get('class', []):
- # text = messages1[-1].find('div', class_='message-bubble').get_text(strip=True)
- # print(text)
- # print(previous_message)
- #print(len(messages))
- # Извлекаем текст из первого класса
- # messages = soup.find_all('div', class_='message-bubble', attrs={'data-testid': ['message-bubble', 'data-id']})
- # message = [message.get_text(strip=True) for message in messages]
- # Если текста напрямую нет, ищем вложенный элемент с классом markdown-text
- # previous_message = message[-2]#
- # previous_message =messages[-2].get_text(strip=True)
- # print("Последнее сообщение пользователя:", previous_message)
- # t= time.time()
- #thread.join()
- #print(time.time()-t)
- # input()
- # # Получение размера окна
- # window_size = driver.get_window_size()
- # print(f"Ширина: {window_size['width']}, Высота: {window_size['height']}")
- # Выводим только последнее сообщение
- # input()
- # time.sleep(3)
- # input()
- # driver.minimize_window()
- # print("lkjn")
- # if 'no such window: target window' in str(ex2):
- # print("exit no such window: target window already closed")
- # error_closse(driver)
- # print(ex2) # print("error")
- # time.sleep(5)
- # print(ex1) # driver.close() # driver.quit()
- # html_content = driver.page_source
- #
- # # Сохраните HTML-код в файл
- # with open('page_source.html', 'w', encoding='utf-8') as file:
- # file.write(html_content)
- # time.sleep(6)
- # input()
- # input()
- # # Найдите текущий текст
- # current_message_text = soup.find('div', class_='message-bubble').get_text(strip=True)
- #
- # # Сравните с предыдущим текстом
- # if current_message_text != previous_message_text:
- # print("Обновленный текст:", current_message_text)
- # previous_message_text = current_message_text
- #
- # # Подождите перед следующей проверкой
- # time.sleep(3) # Увеличьте или уменьшите время ожидания по необходимости
- # print("Остановка программы.")
- # # time.sleep(1.5)
- # # driver.find_element("id", "microphone").click() # включить запись голоса
- # # time.sleep(2.91)
- # t2 = threading.Thread(target=t, args=(driver,))
- # t2.start()
- # while 1:
- # try:
- # # time.sleep(0.31)
- # text0 = driver.find_element("id", "textEditor").text
- # text = str(text0)
- # if len(text) != 0 and text != None and text != "None":
- # driver.find_element("id", "textEditor").clear() # удалить старый текст.
- # text = str(text.lower()) + str(" ")
- # text = repeat(text, k)
- # if k.get_flag() == True:
- # k.set_flag(False)
- # text0 = text[0].upper() + text[1:]
- # press_keys(text0)
- # else:
- # press_keys(text)
- # print("+++++++++++++++")
- # mic(driver)
- # # driver.find_element("id", "mic").click() # включить запись голоса
- # # time.sleep(0.35)
- # # driver.find_element("id", "mic").click() # включить запись голоса
- # text = "None"
- # except KeyboardInterrupt:
- # error_closse(driver)
- # break
- #
- # except Exception as ex: #
- # print(ex)
- # if 'HTTPConnectionPool'in str(ex):
- # print("exit HTTPConnectionPool") # except HTTPConnectionPool:
- # error_closse(driver)
- # break
- #
- # if 'SIGKILL'in str(ex):
- # print("exit SIGKILL") # except HTTPConnectionPool:
- # error_closse(driver)
- # break
- # if 'no such window: target window already closed'in str(ex):
- # print("exit target window closed")
- # error_closse(driver)
- # break
- # print("yex")
- # option.add_argument("--disable-dev-shm-usage")
- # option.add_argument('--allow-running-insecure-content')
- # adress = os.getcwd() + str('/chromedriver')
- # s=Service(adress)
- # # s=Service('/usr/local/bin/chromedriver')
- # option.binary_location = '/usr/bin/google-chrome'
- # s=Service('/mnt/89d7250f-eddb-4218-bdc6-018b7fdb958f/linux must have/chromedriver_linux64/chrome-linux64/chrome')
- # driver.find_element("id","b-lang").click()
- # res=driver.find_element("id","lang-menu-filter").send_keys("Russia")
- #
- # driver.execute_script("window.focus();") # class ="wave effect-pulse"] # class ="lang-option" data-code="ru-ru" data-country="Russia" data-language="Русский" >
- # # < div class ="option-line-1" > Russian (Russia) < / div > < div class ="flag"
- # # style="background-image: url("img/flags2/russia.webp");" > < / div > < div class ="option-line-2" > Русский (Россия) < / div > < / div >
- # # driver.implicitly_wait(2)
- # time.sleep(1.91)
- # driver.execute_script("window.focus();")
- # press_key_enter() # Клик по выбранному русскому языку
- # time.sleep(2.81)
- # driver.find_element("id", "modal-b-close-lang").click() #
- # time.sleep(2.81)
- # def t(driver):
- # while 1:
- # try: # time.sleep(12.65) # driver.find_element("class","p_edit dir_LTR").clear() # удалить старый текст.
- # text = driver.find_element("id", "speech-display").text
- # text = str(text)
- # if len(text) != 0 and text != '': # print('time')
- # time.sleep(5)
- # text1 = str(driver.find_element("id", "speech-display").text)
- # if text != text1 and len(text1) != 0 and text1 != None and text1 != "None": # print(time.time()) print("ch")
- # pass
- # else:
- # text=""
- # text1=''
- # mic(driver) # print("oikjuhyg")
- # time.sleep(0.61)
- # # else:
- # except Exception as ex:
- # # print(ex)
- # pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement