나는 크롤러로 PhantomJS를 사용하고 있습니다. 페이지에 JS가 없다면 onLoadFinished
이 실행될 때 완전히로드되었다고 추측 할 수 있지만 페이지에 JS가 있으면 스크립트에 작업 할 수있는 기회를주기 위해 약간 기다려야합니다.PhantomJS에로드 된 페이지에서 자바 스크립트를 감지
var pageHasJS = page.evaluate(function() {
return (document.getElementsByTagName("script").length > 0 ||
document.evaluate("count(//@*[starts-with(name(), 'on')])",
document, null, XPathResult.NUMBER_TYPE,
null).numberValue > 0);
})
이 <script>
태그와 onsomething
속성을 가진 요소를 찾습니다이 감지 JS에서 내 현재 자상이다.
Q1 : JS를 페이지에 몰래 넣을 수있는 다른 HTML 구문이 있습니까? javascript:
아무 것도 클릭하지 않기 때문에 URL은 계산되지 않습니다.
질문 2 : 두 번째 테스트를 수행하는 더 좋은 방법이 있습니까? I 이이라고 믿는다면 querySelector
으로 할 수 없으므로 XPath를 사용하지만 동일한 작업을 수행하는 다른 기능이있을 수 있습니다.
Q3 : 크롤러가로드되면 크롤러가 페이지와 상호 작용하지 않습니다. onload
이벤트는 사용자 상호 작용이 없을 때 발생하는이라는 기존 레거시 이벤트 속성 인 입니다. 다른 사람들이 있습니까? 즉, 두 번째 테스트를 document.evaluate("count(//@onload)", ...)
또는 심지어 !!document.body.getAttribute("onload")
으로 바꾸는 것이 안전할까요?
나는 당신이 좋은 사람이라고 생각합니다. 'onunload' 속성에 js가있을 수 있지만, 이것은 당신을 걱정하지 않아야합니다. –