2017-12-28 33 views
2

셀렌과 파이어 폭스 웹 드라이버를 사용하여 프로그램을 작성했습니다.파이썬과 셀레늄 : 파이어 폭스는 기본 설정을 지정해도 다운로드 할 때 대화 상자를 계속 만듭니다.

def dowloadFile(link): 
    profile = webdriver.FirefoxProfile() 
    profile.set_preference('browser.download.folderList', 2) # custom location 
    profile.set_preference('browser.download.manager.showWhenStarting', False) 
    profile.set_preference('browser.download.dir', '/tmp') 
    profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 
    'application/pdf') 

    driver = webdriver.Firefox(profile) 
    #driver.set_window_position(-10000,0) 
    driver.get(link) 
    s = BeautifulSoup(driver.page_source, "html.parser") 
    st=s.find('div',{"class":"bloc-docs-link bloc-250"}) 
    #print("hadiii ST: "+str(st)) 
    x=st.find('a') 
    fm=x.get('href') 
    fm="https://www.marchespublics.gov.ma/"+fm 
    driver.get(fm) 
    driver.quit() 

my 함수는 매개 변수로 링크를 취한 후 해당 링크를 가져오고 마지막으로 파일을 다운로드하는 다른 링크를 찾습니다. 내 파이어 폭스의 환경 설정을 지정해도 내 문제는 다운로드 할 때 항상 대화 상자를 계속 표시하여 저장할지 여부를 확인하는 것입니다. 나는이 대화 상자없이 파일을 다운로드 할 수 있도록 무엇을해야할지 모른다.

도움주세요. 미리 감사드립니다.

답변

1

나는 그 문제도 가지고 있습니다. 방금 대신이 작업을 수행했습니다. 참고 : 파일을 다운로드하는 데 많은 시간이 걸리므로 그만한 가치가있을 수 있습니다. 그렇지 않으면 트릭을 수행합니다.

alert = driver.switch_to_alert() 

가져 오기 예상 조건 :

예를 들어 다음과 같이 대화 상자를 사용할 수 있도록 준비가 경고 개체 만들기 다음

from selenium.webdriver.support import expected_conditions as EC 

를, 브라우저를 지시하는 함수를 작성 예상 된 조건 (경고)이 프롬프트 될 때까지 대기합니다.

WebDriverWait(browser, 3).until(EC.alert_is_present() 
except TimeoutException: 

시도/예외 블록을 넣는 것이 가장 좋지만 필수는 아닙니다.

try: 
     alert = driver.switch_to_alert() 
     alert_wait() 
     alert.accept() 
    except print('No alertfound') 
:

alert.accept() 

이 기능은 다음과 같이 보일 수 있습니다 : 셀레늄이 경고 창을 장악 한 후

그런 다음, 단순히 다운로드를 확인하는 경고 개체의 '동의'방법을 사용

또한이 요구 사항/BeautifulSoup 모듈 요청을 사용하여 브라우저를 렌더링하고 많은 웹 페이지를 탐색 할 때 발생하는 지연을 경험하지 않아도됩니다. 요청 모듈은 배후에서 모든 것을 처리합니다. 다운로드하기 전에 암호를 입력해야하는 경우 까다로워집니다. 그렇지 않다면, BeautifulSoup 라이브러리는 태그/외부 참조를 긁어 내고 목록에서 수집 한 다음 비슷한 request.get() 메소드를 사용하여 하나씩 차례대로 반복하는 데 좋습니다.

실제로이 문제가 발생한 마지막 시간에는 셀렌 대신 요청 모듈을 사용했으며 경고 창이 자동으로 승인되었습니다. 너무 빨리 밝아.

+0

답변 해 주셔서 감사합니다. 제 경우에는 파일 다운로드를위한 파일 톤이 있습니다. 그래서 프로그램은 확실히 느려질 것입니다. 내가 아는 것 : profile.set_preference ('browser.helperApps.neverAsk.saveToDi sk', 'application/pdf')는 브라우저가 대화 상자를 표시하지 않도록 할 책임이 있습니다. 왜 작동하지 않는지 모르겠다. – Elroum

+0

내가 기억하는 것으로부터, 셀레늄은 그런 버그로 가득 차 있습니다.또한 파이어 폭스는 우리와 같은 사람들에게 '웹 스크래퍼'라는 용어를 사용하여 사람들을 어렵게 만들었습니다. 나는 결코 파이어 폭스를 사용하지 않는다. 개인적으로 Chrome 브라우저가 내가 시도한 것 중에서 최고라고 생각합니다. –

+0

오, 마지막으로 한 가지 (5 분이 지났기 때문에 첫 번째 댓글을 수정할 수 없습니까?이 규칙은 맞습니까?) 나는 빗나간다, 이것은 잡초에 길을 넣고 있을지 모르지만 나는 asyncio/coroutines/script의 일부로 try를 쓰는 것을 사용한다. 그것들은 파이썬을 유명하게 만드는 중요한 부분입니다. 여기에 나 혼자 있기 전에 Luciano Ramalho가 "Fluent Python"을 확인하는 것이 좋습니다. Github에서 무료. 당신은 당신이 행복해 할 것입니다. 저자 루치아노 (Louiano)는 코 루틴을 매우 잘 다루므로 처음에는 생략 할 수 있습니다. –

관련 문제