[PYTHON] Python과 PhantomJS에서 Selenium을 사용하여 파일 시스템에 파일 다운로드
PYTHONPython과 PhantomJS에서 Selenium을 사용하여 파일 시스템에 파일 다운로드
필자는 PhantomJS / Selenium / python-selenium을 사용하여 파일 시스템에 파일을 다운로드하려고합니다. 나는 쉽게 DOM을 탐색하고 클릭 등을 할 수 있습니다. 그러나 파일을 다운로드하는 것은 상당히 번거로운 것으로 증명됩니다. 파이어 폭스와 pyvirtualdisplay와 헤드리스 접근 방식을 시도했지만 잘 작동하지 않았으며 믿을 수 없을 정도로 느린했다. CasperJS가 파일 다운로드를 허용한다는 것을 알고 있습니다. 누구든지 CasperJS를 Python과 통합하거나 PhantomJS를 사용하여 파일을 다운로드하는 방법을 알고 있습니까? 매우 감사.
해결법
-
==============================
1.이 질문이 꽤 오래되었지만 PhantomJS를 통해 파일을 다운로드하는 것은 여전히 문제입니다. 그러나 우리는 PhantomJS를 사용하여 다운로드 링크를 얻고 csrf 토큰과 같은 모든 필요한 쿠키를 가져올 수 있습니다. 그리고 요청을 실제로 다운로드 할 수 있습니다.
이 질문이 꽤 오래되었지만 PhantomJS를 통해 파일을 다운로드하는 것은 여전히 문제입니다. 그러나 우리는 PhantomJS를 사용하여 다운로드 링크를 얻고 csrf 토큰과 같은 모든 필요한 쿠키를 가져올 수 있습니다. 그리고 요청을 실제로 다운로드 할 수 있습니다.
import requests from selenium import webdriver driver = webdriver.PhantomJS() driver.get('page_with_download_link') download_link = driver.find_element_by_id('download_link') session = requests.Session() cookies = driver.get_cookies() for cookie in cookies: session.cookies.set(cookie['name'], cookie['value']) response = session.get(download_link)
그리고 지금 응답 .content 실제 파일 내용이 나타나야합니다. 우리는 다음에 그것을 공개적으로 쓰거나 우리가 원하는대로 할 수 있습니다.
-
==============================
2.PhantomJS는 현재 파일 다운로드를 지원하지 않습니다. 대안 관련 문제 :
PhantomJS는 현재 파일 다운로드를 지원하지 않습니다. 대안 관련 문제 :
내가 아는 한 적어도 3 가지 옵션이 있습니다.
다음과 같은 링크도 있습니다.
-
==============================
3.필자의 유스 케이스에서는 파일을 가져 오기 위해 양식을 제출해야했습니다. 드라이버의 execute_async_script () 함수를 사용하여이 작업을 수행 할 수있었습니다.
필자의 유스 케이스에서는 파일을 가져 오기 위해 양식을 제출해야했습니다. 드라이버의 execute_async_script () 함수를 사용하여이 작업을 수행 할 수있었습니다.
js = ''' var callback = arguments[0]; var theForm = document.forms['theFormId']; data = new FormData(); data.append('eventTarget', "''' + target + '''"); // this is the id of the file clicked data.append('otherFormField', theForm.otherFormField.value); var xhr = new XMLHttpRequest(); xhr.open('POST', theForm.action, true); ''' for cookie in driver.get_cookies(): js += ' xhr.setRequestHeader("' + cookie['name'] + '", "' + cookie['value'] + '"); ' js += ''' xhr.onload = function () { callback(this.responseText); }; xhr.send(data); ''' driver.set_script_timeout(30) file = driver.execute_async_script(js)
-
==============================
4.그런 식으로는 불가능합니다. 다른 대안을 사용하여 wget o curl과 같은 파일을 다운로드 할 수 있습니다.
그런 식으로는 불가능합니다. 다른 대안을 사용하여 wget o curl과 같은 파일을 다운로드 할 수 있습니다.
파이어 폭스를 사용하여 적절한 요청과 셀레늄을 찾아 그 값을 얻고 마침내 상자를 사용하여 파일을 다운로드하십시오.
curlCall=" curl 'http://www_sitex_org/descarga.jsf' -H '...allCurlRequest....' > file.xml" subprocess.call(curlCall, shell=True)
from https://stackoverflow.com/questions/25755713/using-selenium-with-python-and-phantomjs-to-download-file-to-filesystem by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Jquery 및 Django CSRF 토큰 (0) | 2018.10.23 |
---|---|
[PYTHON] pandas : MultiIndex를 2 차 인덱스의 범위로 분할합니다. (0) | 2018.10.23 |
[PYTHON] 파이썬은 코드 포인트가 아닌 문자로 배열에 유니 코드 문자열을 인쇄합니다. (0) | 2018.10.23 |
[PYTHON] 항목을 목록 내부로 이동 하시겠습니까? (0) | 2018.10.23 |
[PYTHON] C ++ 문자열 파싱 (파이썬 스타일) (0) | 2018.10.23 |