2015-02-23 2 views
4

Когда я работаю в приложении с большим количеством javascript, мне очень нравится использовать Console.log() для отладки. Тем не менее, я хочу, чтобы я правильно подавил все консольные записи в процессе производства.Обнаружение вывода консоли javascript с помощью python

Я хотел бы создать скрипт python, чтобы пройти через сайт и сгенерировать список страниц, которые пишут что-то на консоль. Я знаю, что я мог бы просто разорвать файлы javascript перед минимизацией и искать «Console.Log», но я часто являюсь аналитиком проекта и, следовательно, не имею доступа к кодовой базе. У нас также есть тонна сайтов, которые не были затронуты через некоторое время, но могут использовать сканирование (большой стажерский проект :-)).

Возможно ли это с помощью python?

+0

Вы можете использовать 'urllib', чтобы прочитать источник, ищущий журналы. –

+0

Достаточно решительный противник мог навсегда сохранить свою функцию ведения журнала консоли. Ex. с 'eval (rot13 (pbafbyr.ybt (« Uryyb »)))', просто поиск в «console» не найдет его. Единственный способ быть на 100% уверенным, что ваша программа не регистрируется, - это запустить все возможные кодовые пути со всеми возможными входами ... Но, конечно, большинство программ не написано вашим заклятым врагом, поэтому просто ищите " console.log "должен поймать 99% случаев. – Kevin

+0

что-то вроде 'console.log = console.warn = console.dir = console.debug = console.time = console.timeEnd = console.assert = function() {};' и т. Д. Будет подавлять все консольные протоколы –

ответ

7

Что вы можете сделать, это использовать selenium browser automation tool и проверьте консоль журналы:

from selenium import webdriver 
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities  

capabilities = DesiredCapabilities.CHROME 
capabilities['loggingPrefs'] = { 'browser':'ALL' } 

driver = webdriver.Chrome(desired_capabilities=capabilities) 

driver.get('http://foo.com') 

# print console log messages 
for entry in driver.get_log('browser'): 
    print entry 

Взятые из Getting console.log output from Chrome with Selenium Python API bindings.

+0

Спасибо @alecxe. Это может быть хорошим решением, хотя я бы предпочел не зависеть от того, установлен ли на машине хром, который, как я полагаю, будет иметь значение – Elliott

+0

@ user1159067, вы также можете использовать 'Firefox',' Safari', IE или безголовый 'PhantomJS' браузер. – alecxe

+0

Сторона примечания: чтобы закрыть окно после того, как вы напечатали выход, используйте driver.close() –

Смежные вопросы