Ок ry вход: ‎App Store: Одноклассники: Социальная сеть

ok-ru-dl/ok.py на мастере · karjok/ok-ru-dl · GitHub

из импорта запросов получить
импорт ре, html, json, os, sys
, если «termux» в sys.prefix:
попытка:
os.system(«termux-setup-storage»)
кроме:
проход
каталог = «/sdcard/OK-RU»
иначе:
дир = «ОК-РУ»
попытка:
os. mkdir(дир)
кроме:
проход
класс ОкРуДл:
по определению __init__(я,видео_url):
self.url = видео_url
определяющих размеров (я, размер):
для x в [‘B’, ‘KB’, ‘MB’, ‘GB’, ‘TB’]:
, если размер < 1024.0:
возврат «%3.1f %s» % (размер, x)
Размер /= 1024,0
размер возврата
def getb(self,frame_url,title):
х = получить (frame_url)
xx = открыть (f»{dir}/{название}. mp4″,»ab»)
xx.write(x.content)
вернуть x.content
@свойство
загрузка по умолчанию (самостоятельно):
bb = bytearray()
r = get(self.url,headers={«User-agent»:»Mozilla/5.0 (Linux; Android 9; Redmi Note 5A) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/80.0.3987.149 Mobile Safari/537.36 «})
v = re.search(r’data\-video\=\»(.*?)\»‘,r.text).group(1)
данные = json.loads(html.unescape(v))
video_title = данные[«videoName»]. replace(«.»,»_»).replace(«/»,»_»)
print(f»\nПодготовка к загрузке \033[92m{video_title}\033[0m»)
URL-адрес = данные[«videoSrc»]
v = get(url,headers={«User-agent»:»Mozilla/5.0 (Linux; Android 9; Redmi Note 5A) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/80.0.3987.149 Mobile Safari/537.36″} )
w = re.findall(r’http[s]:\/\/.*?\/video\/’,v.text)
х = получить(ш[0]).текст
y = re.findall(r'[(САМЫЙ НИЗКИЙ)|(СРЕДНИЙ)|(ВЫСОКИЙ)].*?.ts’,x)
кадров = []
print(«Начало. ..»)
для рамы в y:
b = self.getb(w[0]+frame,video_title)
бб += б
кадров.добавить(кадр)
print(f»\rПрогресс загрузки: \033[92m{round((len(frames)/len(y))*100)}%\033[0m [\033[92m{self.sizes(len(bb))}\033[0m]..»,end =»», флеш = Истина)
print(f»\nВидео успешно загружено.\nВидео сохранено в \033[92m{dir}/{video_title}.mp4\033[0m\nДля другой программы: \033[92mhttps://karjokpangesty.blogspot.com\033 [0м»)
, если __name__==’__main__’:
os. система(«очистить»)
print(f»»»\033[0m
_
___ | | __ _ __ _ _
/ _ \| |/ / | ‘__| | | |
| (_) | <_| | | |_| |
\___/|_|\_(_)_| \__,_|
\033[92mVideo Downloader \033[0m|\033[92m Karjok Pangesty\033[0m
«»»)
urlz = input(«\033[92mok.ru URL видео: \033[0m»)
# urlz = re. search(«http[s]\:\/\/[m\.]+ok\.ru»,url)
, если URL-адрес:
ок = OkRuDl(urlz)
ок.загрузить
иначе:
печать(«Неверный URL-адрес!»)

для получения ссылок с веб-сайта ok.ru с поисковым запросом из файла excel с использованием python selenium

Я не могу получить несколько ссылок на видео с ok.ru, используя код ниже:

 из веб-драйвера импорта селена
из selenium.webdriver.common.by импорт
импортировать openpyxl
 
# Настройте параметры Chrome
параметры = webdriver.ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled')
 
# Настроить драйвер Chrome
драйвер = webdriver.Chrome(опции=опции)
 
# Перейдите на ok.
ru driver.get('https://ok.ru') # Принять куки # cookies_button = driver.find_element(By.CSS_SELECTOR, 'div#hook_Block_CookieNotifier button.cookie-settings__submit') # cookies_button.click() # Авторизоваться username_input = driver.find_element(By.CSS_SELECTOR, 'input[name="st.email"]') password_input = driver.find_element(By.CSS_SELECTOR, 'input[name="st.password"]') login_button = driver.find_element(By.CSS_SELECTOR, 'input.button-pro[type="submit"]') username_input.send_keys('[email protected]') password_input.send_keys('Пароль') логин_кнопка.щелчок() # Чтение данных из входного файла input_file = 'input_file.xlsx' output_file = 'ok_links.xlsx' рабочая книга = openpyxl.load_workbook (входной_файл) рабочий лист = рабочая книга.активный max_row = рабочий лист.max_row # Настраиваем выходной файл output_workbook = openpyxl.Workbook() output_worksheet = output_workbook.active # Перебираем строки во входном файле для строки в диапазоне (1, max_row + 1): запрос = рабочий лист.
ячейка (строка = строка, столбец = 1). значение если запрос не None: print(f"Поиск {запроса}") search_box = driver.find_element(By.CSS_SELECTOR, 'input[name="st.query"]') search_box.clear() search_box.send_keys(запрос) search_box.submit() # Извлеките результаты поиска видео video_links = driver.find_elements(By.XPATH, '//*[@id="hook_Block_SearchMRB"]/portal-search/div/div[1]/div[2]/div[2]/div[1]/h3 ') print(f"Найдено всего {len(video_links)} видео") # Добавляем результаты поиска видео в лист результатов для ссылки в video_links: title_element = link.find_element(By.XPATH, '//*[@id="hook_Block_SearchMRB"]/portal-search/div/div[1]/div[2]/div[2]/div[1]/h3 ') заголовок = элемент_заголовка.текст URL-адрес = ссылка.get_attribute("href") output_worksheet.append([запрос, заголовок, URL-адрес]) print(f"Добавлена ​​ссылка: {название} ({url})") # Сохранить выходной файл output_workbook.
save (выходной_файл) # Очистить водитель.выйти()

Он работает нормально для одной ссылки, но я хочу получить все ссылки под результатами поиска.

Кажется, я указал неправильный xpath. Любая помощь, которую я могу получить, чтобы решить эту проблему, очень ценится.

  • python
  • selenium-webdriver
  • просмотр веб-страниц
3

В определении title_element вы используете

link.find_element , так как вы хотите ограничить поиск внутри ссылка . Но этого мало, надо еще добавить точку . перед xpath:

 .//*[@id="hook_Block_SearchMRB"]/portal-search/div/div[1]/div[2]/div[2]/div[1]/h3
 

Помните

  • //div находит div во всех html
  • .//div находит div, которые являются потомками текущего узла

Более того

  • .// находит потомков текущего узла
  • .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Закрыть
Menu