[PYTHON] Python으로 구동되는 PhantomJS / Selenium의 CSS / 기타 리소스 다운로드 방지
PYTHONPython으로 구동되는 PhantomJS / Selenium의 CSS / 기타 리소스 다운로드 방지
CSS / 다른 리소스의 다운로드를 방지하여 Python에서 Selenium / PhantomJS 웹 스크래퍼 속도를 높이려고합니다. 다운로드가 필요한 것은 img src와 alt 태그뿐입니다. 이 코드를 찾았습니다.
page.onResourceRequested = function(requestData, request) {
if ((/http:\/\/.+?\.css/gi).test(requestData['url']) || requestData['Content-Type'] == 'text/css') {
console.log('The url of the request is matching. Aborting: ' + requestData['url']);
request.abort();
}
};
via : 어떤 종류의 리소스를 건너 뛰도록 PhantomJS를 제어하려면 어떻게해야합니까?
어떻게 / 어디서 Python으로 구동되는 Selenium에서이 코드를 구현할 수 있습니까? 아니면 CSS / 다른 리소스를 다운로드하지 못하도록하는 또 다른 방법이 있습니까?
참고 : 저는 이미 다음을 통해 service_args 변수를 편집하여 이미지 다운로드를 방지하는 방법을 찾았습니다.
파이썬 webdriver에서 phantomjs / ghostdriver에 대한 프록시를 설정하려면 어떻게해야합니까?
과
python에 Selenium이있는 PhantomJS 1.8. 이미지를 차단하는 방법?
그러나 service_args는 CSS와 같은 리소스로 나를 도와 줄 수 없습니다. 감사!
해결법
-
==============================
1."watsonmw"라는 대담한 젊은 영혼은 최근에 Ghostdriver (Phantom.js가 Selenium과 인터페이스하기 위해 사용하는 기능)에 추가하여 onResourceRequested와 같은 페이지 객체가 필요한 Phantom.js API 호출에 액세스 할 수있게했습니다.
"watsonmw"라는 대담한 젊은 영혼은 최근에 Ghostdriver (Phantom.js가 Selenium과 인터페이스하기 위해 사용하는 기능)에 추가하여 onResourceRequested와 같은 페이지 객체가 필요한 Phantom.js API 호출에 액세스 할 수있게했습니다.
해결책을 얻으려면 소스에서 빌드를 고려하십시오 (개발자는 "근대 컴퓨터에서 4 개의 병렬 컴파일 작업으로 약 30 분이 소요됩니다"). 그리고 위에 링크 된 패치를 통합하십시오.
그렇다면이 (테스트되지 않은) 파이썬 코드는 개념 증명으로 작동해야합니다.
from selenium import webdriver driver = webdriver.PhantomJS('phantomjs') # hack while the python interface lags driver.command_executor._commands['executePhantomScript'] = ('POST', '/session/$sessionId/phantom/execute') driver.execute('executePhantomScript', {'script': ''' page.onResourceRequested = function(requestData, request) { // ... } ''', 'args': []})
그때까지만 변수를 찾을 수 없습니다 : 페이지 예외가 발생합니다.
행운을 빕니다! Javascript 환경에서 작업하고, 도마뱀을 몰며, 프록시를 만드는 것과 같은 많은 훌륭한 대안이 있습니다.
-
==============================
2.윌의 대답이 나를 따라 잡았어. (감사합니다!)
윌의 대답이 나를 따라 잡았어. (감사합니다!)
현재 PhantomJS (1.9.8)에는 이미 watsonmw의 패치가 포함 된 Ghostdriver 1.1.0이 포함되어 있습니다.
최신 PhantomJS를 다운로드하고 다음을 수행해야합니다 (sudo가 필요할 수도 있음).
ln -s path/to/bin/phantomjs /usr/local/share/phantomjs ln -s path/to/bin/phantomjs /usr/local/bin/phantomjs ln -s path/to/bin/phantomjs /usr/bin/phantomjs
그리고 이것을 시도하십시오 :
from selenium import webdriver driver = webdriver.PhantomJS('phantomjs') # hack while the python interface lags driver.command_executor._commands['executePhantomScript'] = ('POST', '/session/$sessionId/phantom/execute') driver.execute('executePhantomScript', {'script': ''' var page = this; // won't work otherwise page.onResourceRequested = function(requestData, request) { // ... } ''', 'args': []})
-
==============================
3.제안 된 솔루션이 나에게 도움이되지 않았지만이 솔루션은 작동합니다 (driver.execute_script 사용).
제안 된 솔루션이 나에게 도움이되지 않았지만이 솔루션은 작동합니다 (driver.execute_script 사용).
driver.command_executor._commands['executePhantomScript'] = ('POST', '/session/$sessionId/phantom/execute') driver.execute_script(''' this.onResourceRequested = function(request, net) { console.log('REQUEST ' + request.url); }; ''')
from https://stackoverflow.com/questions/19099070/prevent-css-other-resource-download-in-phantomjs-selenium-driven-by-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 세트의 모든 부분 집합을 얻는 방법? (powerset) (0) | 2018.11.02 |
---|---|
[PYTHON] Python과 OpenCV를 사용하여 붉은 색 찾기 (0) | 2018.11.02 |
[PYTHON] 파이썬으로 UUID v1에서 시간 추출하기 (0) | 2018.11.02 |
[PYTHON] 파이썬 : __getattr __ ()을 구현하는 방법? (0) | 2018.11.02 |
[PYTHON] 판다 열 순서를 재 배열하는 방법? (0) | 2018.11.02 |