Начало работы с Selenium и Python

Введение Автоматизация веб-браузера набирает популярность, и появилось множество фреймворков / инструментов, предлагающих разработчикам услуги автоматизации. Автоматизация веб-браузера часто используется для целей тестирования в средах разработки и производства, хотя она также часто используется для сбора данных из общедоступных источников, анализа и обработки данных. На самом деле, что вы делаете с автоматизацией, зависит от вас, просто убедитесь, что то, что вы делаете, законно, поскольку «боты», созданные с помощью инструментов автоматизации, могут часто

Вступление

Автоматизация веб-браузера набирает популярность, и появилось множество фреймворков / инструментов, предлагающих разработчикам услуги автоматизации.

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

На самом деле, что вы делаете с автоматизацией, зависит от вас, но просто убедитесь, что то, что вы делаете, является законным, поскольку «боты», созданные с помощью инструментов автоматизации, часто могут нарушать законы или условия обслуживания сайта.

Selenium - один из широко используемых инструментов, используемых для автоматизации веб-браузера, который предлагает множество функций и возможностей по сравнению с браузером.

Он поддерживает множество языков, таких как C #, Java, Perl, PHP и Ruby, хотя в рамках этого руководства мы будем использовать его с Python в Windows.

Что такое селен?

Selenium - отличный инструмент, который позволяет разработчикам моделировать конечных пользователей всего несколькими строками кода. Используя предлагаемые инструменты, очень легко использовать веб-страницы и имитировать человека, хотя по-настоящему воспроизвести человеческое поведение сложно.

Для борьбы с «ботами», которые предназначены для копирования людей, используются многие сложные системы для распознавания человеческого поведения, которое невозможно воспроизвести с помощью инструментов программирования.

Если вы создаете приложение с помощью Selenium, убедитесь, что вы соблюдаете все законы, связанные с автоматизацией веб-браузера, или просто используйте его для целей тестирования в своей собственной производственной среде.

Некоторые из наиболее популярных задач, выполняемых с помощью Selenium, включают, но не ограничиваются:

  • Нажатие кнопок
  • Ввод текста
  • Извлечение текста
  • Доступ к файлам cookie
  • Нажатие клавиш

Предпосылки

Прежде чем мы начнем, нам нужно сделать несколько вещей для настройки:

  • Установите Google Chrome на свой компьютер - мы будем моделировать пользователя в Google Chrome, хотя вы можете моделировать другие браузеры, но в этой статье я буду использовать Google Chrome.
  • Загрузите chromedriver.exe , потому что для имитации браузера вам понадобится путь к этому исполняемому файлу на вашем компьютере.
  • Установите пакет selenium с помощью команды pip install selenium в командной строке.

Основы

Хорошо, теперь мы готовы начать работу с Selenium. Первое, что вам нужно сделать, это запустить браузер:

 from selenium import webdriver 
 
 EXE_PATH = r'path\to\chromedriver.exe' 
 driver = webdriver.Chrome(executable_path=EXE_PATH) 
 driver.get('https://google.com') 

Запустив это, откроется Google Chrome и перейдет на https://google.com .

Здесь важно отметить, что подключение к веб-странице осуществляется с помощью функции get(URL) объекта driver

Как вы могли заметить, driver является WebDriver , вы используете его для программного доступа к браузеру, например:

 print(driver.page_source) 

Приведенный выше код печатает исходный HTML-код всей страницы. Если вам нужно собрать данные, это очень полезно.

Расположение элементов

Обычно вам нужно не содержимое всей страницы, а конкретные элементы.

Для этого вам сначала нужно обнаружить свою цель на странице, и для этого вы можете использовать инструмент Inspect Element в Google Chrome.

Это означает, что если вам нужно содержимое определенного элемента на странице, чтобы получить идентификатор тега, вы можете сделать следующее (в обычном сеансе Google Chome):

  • Щелкните правой кнопкой мыши элемент
  • Выберите "Проверить"
  • В новом окне вы можете посмотреть HTML-код элемента, и его идентификатор будет после id= .

Получив нужные нам элементы, мы можем выполнять с ними различные операции.

Получение элементов по идентификатору

Если у вас есть точный идентификатор элемента, который вы ищете, его легко получить:

 element = driver.find_element_by_id('element_id') 

Получение элементов по имени

Аналогично предыдущему подходу:

 element = driver.find_element_by_name('element_name') 

Получение элементов по классам

И снова аналогично предыдущему подходу:

 element = driver.find_element_by_class_name('element_class_name') 

Получение элементов по тегу HTML

В некоторых случаях вы можете захотеть получить все элементы по определенному тегу:

 links = driver.find_elements_by_tag_name('a') 

В этом случае links заполняются всеми a тег, который теперь содержит все ссылки на странице. Это может быть полезно для сканирования в Интернете.

Получение элементов с помощью XPath

Не все элементы имеют идентификатор, или , возможно , вы не хотите , чтобы получить доступ к каждому a HTML - тег. Есть и другие способы получить очень специфический элемент, например XPath , который является еще одним способом получения элементов. С XPath вы можете легче и эффективнее находить элементы:

 tag_list = driver.find_elements_by_xpath("//tag[@attr='val']") 

tag_list теперь содержит каждый tag , для которого атрибут attr установлен в значение val :

 <tag attr='val'>Foo</tag> 

Теперь вы можете перебирать tag_list и взаимодействовать с каждым Selenium WebElement в нем.

Вы можете узнать больше о системе XPath в Selenium здесь .

Селен WebElement

Selenium WebElement практически представляет собой HTML-элемент. Вы можете выполнять операции с этими элементами так же, как и конечный пользователь.

Эти операции включают:

  • Доступ к простым свойствам элемента, таким как текст внутри ( element.text )
  • Доступ к родительским элементам, которые также относятся к типу WebElement ( element.parent )
  • Доступ определенных атрибутов, как href в качестве тега ( a element.get_attribute('href') )
  • Поиск в нем (так же, как в driver )
  • Щелкнув по нему ( element.click() )
  • Ввод текста, если возможно ( element.send_keys(‘Input Text') )

Selenium WebDriver

WebDriver похож на WebElement , однако основное отличие заключается в их объеме. Область действия последнего - это сам элемент, а область действия первого - вся страница.

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

Некоторые другие очень полезные вещи:

  • Выполнение JavaScript: driver.execute_script("script")
  • Сохранение скриншота: driver.save_screenshot('image.png')
  • Инициируйте в "режиме без заголовка", когда браузер экономит время, не отображая страницу:
1
<!-- -->
 from selenium.webdriver.chrome.options import Options 
 
 options = Options() 
 options.headless = True 
 driver = webdriver.Chrome(executable_path=EXE_PATH, chrome_options=options) 
 driver.set_window_size(1440, 900) 

Обратите внимание, что размер окна установлен на (1440, 900) , то есть для предотвращения всевозможных ошибок, связанных с неправильной загрузкой некоторых элементов из-за режима без заголовка.

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

Доступ к файлам cookie

Возможно, вам понадобится добавить или удалить файлы cookie браузера :

 ck = {'some_attr': 'foo', 'some_other_attr': 'bar'} 
 driver.add_cookie(ck) 

При этом в браузер добавляется файл cookie, который может быть полезен, например, если вам нужно добавить файлы cookie аутентификации или предпочтения. Важно убедиться, что файл cookie имеет формат dict

Также очень легко получить файлы cookie из браузера:

 cookies = driver.get_cookies() 
 for ck in cookies: 
 print(ck) 

Приведенный выше код печатает каждый файл cookie в браузере.

Изменение HTML

Иногда вам может понадобиться изменить свойство элемента cerain.

Как упоминалось ранее, вы можете использовать Selenium WebDriver для выполнения JavaScript, и изменение свойств элементов настолько удачно, что это очень легко сделать с помощью JavaScript:

 driver.execute_script("arguments[0].setAttribute('attr','value')", element) 

Здесь element - это элемент, который нужно изменить, attr - это атрибут, который нужно изменить, а value - это новое значение.

Иногда может потребоваться скачать файл с веб-сайта:

 from selenium import webdriver 
 from selenium.webdriver.chrome.options import Options 
 
 options = Options() 
 options.add_experimental_option("prefs", { 
 "download.default_directory": r"path\to\directory", 
 "download.prompt_for_download": False, 
 "download.directory_upgrade": True, 
 "safebrowsing.enabled": True 
 }) 
 
 driver = webdriver.Chrome(executable_path=EXE_PATH, chrome_options=options) 

Вы можете указать путь к месту сохранения, указав download.default_directory , например path\to\directory .

Нажатие клавиш

 import time 
 from selenium.webdriver import ActionChains 
 from selenium.webdriver.common.keys import Keys 
 
 action = ActionChains(driver) 
 for _ in range(3): 
 action.send_keys(Keys.ARROW_DOWN) 
 time.sleep(.1) 
 action.perform() 

Этот код нажимает стрелку вниз ( Keys.ARROW_DOWN ) 3 раза. После каждого действия action.send_keys(Keys.ARROW_DOWN) программа немного подождет. Это рекомендуется, чтобы убедиться, что все ключи зарегистрированы.

Если мы просто запустим несколько команд, они могут потеряться в процессе и фактически не будут регистрироваться.

Keys содержат все клавиши на клавиатуре, а это означает, что вы также можете использовать этот метод для табуляции ( Keys.TAB ) между элементами на странице, что упрощает взаимодействие с ними (также очень важны Keys.RETURN и Keys.SPACE ).

Нажатие кнопок

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

Конечно, более естественным способом установки флажков и раскрывающихся элементов было бы просто извлечь элемент с помощью драйвера и щелкнуть по нему:

 checkbox = driver.find_element_by_id('checkbox') 
 checkbox.click() 

Формы ввода

Вы также можете моделировать нажатия клавиш внутри самих элементов:

 element.send_keys(Keys.CONTROL, 'a') 
 element.send_keys(value) 

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

Кстати, этот код использует сочетание клавиш (CTRL + A) для выделения всего текста внутри элемента. Следующая строка заменяет выделенный текст введенным value

Чтобы зарегистрировать сочетания клавиш, передайте все желаемые клавиши в параметрах send_keys .

Прокрутка

Иногда части страницы загружаются только после прокрутки вниз (например, лента Instagram или любая другая страница с бесконечной прокруткой). Это легко сделать, выполнив простой скрипт JavaScript:

 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 

В приведенном выше коде используется команда JavaScript для прокрутки страницы вниз, теперь вы можете driver.page_source и получить новый контент.

Заключение

Selenium - один из широко используемых инструментов, используемых для автоматизации веб-браузера, который предлагает множество функций и возможностей по сравнению с браузером, управляемым человеком.

Он в основном используется для тестирования / автоматизации производственной или интеграционной среды, хотя его также можно использовать в качестве парсера для исследовательских целей и т. Д. Обязательно соблюдайте все законы, когда вы практикуете парсинг общедоступного контента, чтобы не нарушать какой-либо законы.

comments powered by Disqus