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

Я хочу создать приложение, которое будет принимать ключевое слово в качестве ввода и искать его на YouTube, а затем очищать ссылки и сохранять их в файле блокнота, и все это будет работать в фоновом режиме. Я знаком с библиотекой BeautifulSoup и селеном, но я хочу, чтобы она работала в фоновом режиме, в отличие от 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()

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

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019

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

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

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

0 голосов
/ 06 апреля 2019

Вы можете запустить браузер с параметром --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()

Был веб-драйвер 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-адресов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...