0

웹 사이트에서 사용되는 모든 자바 스크립트의 이름을 찾는 방법을 찾고 있습니다. 요청 lib를 사용하여 웹 사이트의 소스 코드를 다운로드하는 것은 적합하지 않습니다. 사용되는 모든 javascript가 생성되지 않기 때문입니다. 예 : 웹 사이트 https://www.grantthornton.global/en/은 사용 된 모든 자바 스크립트에 대해 Chrome의 '네트워크'탭을 사용하여 Google 웹 로그 분석 (analytics.js)을 사용합니다.파이썬을 사용하여 웹 사이트에서 사용 된 모든 자바 스크립트를 자르십시오.

그러나 google-tag-manager를 통해 analytics.js가로드되므로 소스 코드만으로 analytics.js 사용을 확인할 수는 없습니다. 현재 저는 셀레늄을 사용하여 웹 사이트를로드하고 browsermob-proxy를 통해 모든 데이터를 기록합니다.

from selenium import webdriver 
from browsermobproxy import Server 
import pprint, time 

server = Server("browsermob-proxy-2.1.4\\bin\\browsermob-proxy") 
server.start() 
proxy = server.create_proxy({'captureHeaders': True, 'captureContent': True, 'captureBinaryContent': True}) 

service_args = ["--proxy=%s" % proxy.proxy, '--ignore-ssl-errors=yes'] 
driver = webdriver.PhantomJS("phantomjs-2.1.1-windows\\bin\\phantomjs", service_args=service_args) 
proxy.new_har() 
driver.get('URL GOES HERE') 
time.sleep(3) 
all_requests = [entry['request']['url'] for entry in proxy.har['log']['entries']] 

pp = pprint.PrettyPrinter(indent=4) 
pp.pprint(proxy.har) 

편집 : 플로랑 B의 접근 방식에 따라 솔루션이보다 더 좋은 방법이 있나요
: 나는 다음의 URL (https://www.google-analytics.com/analytics.js 예)를 선택하여 액세스 한 모든 자바 스크립트를 확인할 수 있습니다.

from selenium import webdriver 
import pprint, time 

driver = webdriver.Chrome('chromedriver.exe') 
driver.get("https://www.URLGOESHERE.com") 
time.sleep(3) 
scripts = driver.execute_script("""return window.performance.getEntriesByType("resource").filter(e => e.initiatorType === 'script').map(e => e.name.match(/.+\/([^?]+)/)[1]);""") 
driver.close() 

pp = pprint.PrettyPrinter(indent=4) 
pp.pprint(scripts) 
+0

당신이 당신의 코드 시련을 공유 할 수 webdriver 대신 phantomjs의 다운로드 할 필요가 크롬 webdriver로 대체되었습니다 ? – DebanjanB

+0

죄송합니다. 질문이 일찍 게시되었습니다. 코드가 첨부되었습니다. –

+0

특정 코드를 향상시킬 수 있는지 (예일 수도 있습니다) 또는 방법론이 올바른지 궁금하십니까? –

답변

0

당신은 또한 window.performance API를 통해 모든 다운로드 스크립트를 얻을 수 있습니다 :

scripts = driver.execute_script(""" 
    return window.performance.getEntriesByType("resource") 
    .filter(e => e.initiatorType === 'script') 
    .map(e => e.name); 
    """) 
print(scripts) 
+0

그러면 자바 스크립트를 제공하는 모든 URL 목록이 생성됩니다. 스크립트 자체의 이름이 아닙니다. 그러나 자바 스크립트의 이름이 URL의 끝이므로 쉽게 변형 할 수 있습니다. 보다 우아한 솔루션을 제공해 주셔서 감사합니다. –

+0

은'e.name.match (/ .+ \/([?] +) /) [1]'로 간단하게'e.name'을 대체하여 이름을 얻습니다. –