2014-10-15 4 views
15

Я пытаюсь использовать структуру Requests с python (http://docs.python-requests.org/en/latest/), но на странице, которую я пытаюсь использовать, используется javascript для получения информации, которую я хочу.Использование python Запросы с страницами javascript

Я попытался найти в Интернете решение, но тот факт, что я ищу по ключевому слову javascript, большую часть материала, который я получаю, - это как очистить язык javascript.

Можно ли использовать структуру запросов со страницами, использующими javascript?

ответ

18

Вам понадобится сделать тот же запрос (используя библиотеку Requests), который делает javascript. Вы можете использовать любое количество инструментов (в том числе встроенных в Chrome и Firefox) для проверки HTTP-запроса, поступающего с javascript, и просто сделать этот запрос самостоятельно с Python.

+0

Таким образом, нет никакого способа, чтобы использовать запросы JavaScript. – Ben

+3

Нет, запросы - это http-библиотека. Он не может запускать javascript. – sberry

+4

Куда вы посмотрели и какой инструмент вы использовали, чтобы найти его Бен? Я пытаюсь это прямо сейчас, и я застрял – codyc4321

6

Хотя Selenium может показаться заманчивым и полезным, у него есть одна основная проблема, которая не может быть исправлена: производительность. Рассчитывая все, что делает браузер, вам понадобится намного больше энергии. Даже PhantomJS не конкурирует с простым запросом. Я рекомендую вам использовать Selenium только тогда, когда вам действительно нужно нажать кнопки. Если вам нужен только javascript, я рекомендую PyQt (проверьте его https://www.youtube.com/watch?v=FSH77vnOGqU).

Однако, если вы хотите использовать Selenium, я рекомендую Chrome над PhantomJS. У многих пользователей есть проблемы с PhantomJS, где веб-сайт просто не работает в Phantom. Chrome может быть безголовым (не графическим)!

Прежде всего убедитесь, что вы установили ChromeDriver, от которого зависит селен для использования Google Chrome.

Затем убедитесь, что у вас есть Google Chrome версии 60 или выше, проверяя его в URL хромом: // Настройки/помощь

Теперь все, что вам нужно сделать, это следующий код:

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

chrome_options = Options() 
chrome_options.add_argument("--headless") 

driver = webdriver.Chrome(chrome_options=chrome_options) 

Если вы не знаете, как использовать Selenium, вот краткий обзор:

driver.get("https://www.google.com") #Browser goes to google.com 

Нахождение элементов: используйте либо элементы или метод ЭЛЕМЕНТ. Примеры:

driver.find_element_by_css_selector("div.logo-subtext") #Find your country in Google. (singular) 
  • driver.find_element (ы) _by_css_selector (css_selector) # Каждый элемент, который соответствует этот селектор CSS
  • driver.find_element (ы) _by_class_name (имя_класса) # Каждый элемент со следующим классом
  • driver.find_element (s) _by_id (идентификатор) # Каждый элемент со следующим ID
  • driver.find_element (s) _by_link_text (LINK_TEXT) # Каждый с полным текстом ссылки
  • привода r.find_element (s) _by_partial_link_text (partial_link_text) # Каждый с частичным текстом ссылки.
  • driver.find_element (s) _by_name (имя) # Каждый элемент, где имя = аргумент
  • driver.find_element (s) _by_tag_name (tag_name) # Каждый элемент с именем тега аргументу

Ok! Я нашел элемент (или список элементов). Но что мне теперь делать?

Вот методы, которые вы можете сделать на элемент Элем:

  • elem.tag_name # Может кнопку возврата в.
  • elem.get_attribute ("id") # Возвращает идентификатор элемента.
  • elem.text # Внутренний текст элемента.
  • elem.clear() # Очищает ввод текста.
  • elem.is_displayed() # Истина для видимых элементов, False для невидимых элементов.
  • elem.is_enabled() # Истина для разрешенного ввода, False в противном случае.
  • elem.is_selected() # Выбран ли этот переключатель или элемент флажка?
  • elem.location # Словарь, представляющий местоположение X и Y элемента на экране.
  • elem.click() # Щелкните elem.
  • elem.send_keys ("thelegend27") # Тип thelegend27 в эль (полезно для текстовых входов)
  • elem.submit() # Представить форму, в которой эля принимает участие.

Специальные команды:

  • driver.back() # Нажмите кнопку Назад.
  • driver.forward() # Нажмите кнопку «Вперед».
  • driver.refresh() # Обновить страницу.
  • driver.quit() # Закройте браузер, включая все вкладки.
  • Foo = driver.execute_script ("возвращение 'привет';") # Выполнить JavaScript (МОГ ПРИНЯТЬ ВОЗВРАТ ЗНАЧЕНИЯ!)
Смежные вопросы