Как выполнить поиск чего-либо на YouTube и сохранить результаты поиска в блокноте, все это в фоновом режиме?

#python #selenium #web-scraping #beautifulsoup #automation

#python #селен #очистка веб-страниц #beautifulsoup #автоматизация

Вопрос:

Я хочу создать приложение, которое будет принимать ключевое слово в качестве входных данных и выполнять поиск по нему на YouTube, а затем очищать ссылки и сохранять их в файле блокнота, и все это работает в фоновом режиме. Я знаком с библиотекой BeautifulSoup и selenium, но я хочу, чтобы она работала в фоновом режиме, в отличие от Selenium, который работает перед нами. Я надеюсь, что вопрос ясен, если нет, вы можете спросить.

Я знаком с Selenium, но я хочу автоматизировать поиск в фоновом режиме.

 from selenium import webdriver
driver=webdriver.Chrome("C:\Users\MyPC\Downloads\chromedriver_win32\chromedriver.exe")
driver.set_page_load_timeout(10)
driver.get("http://www.youtube.com")
driver.find_element_by_name("search_query").send_keys("Selenium Tutorial")
driver.find_element_by_id("search-icon-legacy").click()
time.sleep(4)
driver.quit()
  

Этот код открывает браузер, а затем выполняет поиск, но я хочу, чтобы все происходило в фоновом режиме и быстро, без задержек.

Комментарии:

1. Вы продолжаете говорить «в фоновом режиме», но я не совсем уверен, что вы имеете в виду под этим. Фон чего?

2. Вы либо ищете потоковую обработку, либо просто сохраняете этот фрагмент кода как отдельный скрипт и запускаете его отдельно от вашего основного скрипта

3. Попробуйте безголовый вариант, который будет работать в фоновом режиме.

4. Под фоном я подразумеваю, что пользователь не должен видеть, как браузер открывается на его экране, скорее код должен выполняться, и он получает файл notepad на своем компьютере.

5. Selenium может запустить браузер в опции 'headless' , и он не будет отображать свое окно. Вы также можете использовать webdrive PhantomJS , который имитирует веб-браузер и не отображает окно. В Linux вы могли бы использовать program Xfvb для создания поддельного / виртуального монитора и использовать его для запуска программы, у которой нет возможности запускать «без головы»

Ответ №1:

Вы можете запустить браузер с опцией --headless , и он не будет отображать свое окно. Это работает для Firefox и Chrome.

Firefox

 from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
#options.headless = True
options.add_argument('--headless')
driver = webdriver.Firefox(options=options)

driver.get('https://stackoverflow.com')

driver.save_screenshot('screenshot-firefox.png')
driver.close()
  

Chrome

 from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
#options.headless = True
options.add_argument('--headless')
#options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options)

driver.get('https://stackoverflow.com')

driver.save_screenshot('screenshot-chrome.png')
driver.close()
  

Был webdriver PhantomJS, который имитировал безголовый веб-браузер, но он больше не разрабатывается. Этот код все еще выполняется, но он выдает мне пустой page_source и пустой файл screenshot.png

 from selenium import webdriver

driver = webdriver.PhantomJS()

driver.get('https://stackoverflow.com')

print(driver.page_source)

driver.save_screenshot('screenshot.png')
driver.close()
  

В Linux вы можете использовать Xvfb для создания поддельного / виртуального монитора, и программа может использовать его для отображения своего окна. Таким образом, вы не увидите это окно на своем экране.


Все эти методы должны отображать страницу, чтобы она не работала быстрее.

Для ускорения работы вам придется анализировать запросы / ответы из / в веб-браузер и делать то же самое с модулем python requests — но это непросто. Но в этом случае программе не нужно отображать страницу и запускать JavaScript, поэтому она будет работать намного быстрее.

Но тогда у вас может возникнуть другая проблема — если вы делаете запрос слишком быстро, сервер может заблокировать вас, и вам нужны прокси-серверы с разными IP-адресами.

Ответ №2:

есть обходной путь с помощью pyvirtualdisplay также, если вы хотите скрыть браузер selenium, не забудьте закрыть обзор, когда закончите

я думаю, что веб-хостинги могут обнаруживать безголовые браузеры, поэтому вы можете получить разные результаты

прекратите загрузку страницы после того, как вы получите то, что ищете, и / или закройте браузер после сохранения исходного кода, вставьте javascript