2017-12-19 2 views
0

저는 MechanicalSoup를 사용하여 Windows에서 파이썬으로 간단한 webbot을 빌드하려고합니다. 불행히도 저는 (회사가 시행하는) 프록시 뒤에 앉아 있습니다. MechanicalSoup에 프록시를 제공하는 방법을 찾지 못했습니다. 그런 옵션이 있습니까? 그렇지 않다면 내 대안은 무엇입니까?프록시 뒤에 MechanicalSoup 사용

는 편집 : Eytan의 힌트에 따라, 나는 한 단계 더 저를 얻었다 내 코드에 proxiesverify을 추가,하지만 난 여전히 양식을 제출할 수 :

import mechanicalsoup 

proxies = { 
    'https': 'my.https.proxy:8080', 
    'http': 'my.http.proxy:8080' 
} 
url = 'https://stackoverflow.com/' 
browser = mechanicalsoup.StatefulBrowser() 
front_page = browser.open(url, proxies=proxies, verify=False) 
form = browser.select_form('form[action="/search"]') 
form.print_summary() 
form["q"] = "MechanicalSoup" 
form.print_summary() 
browser.submit(form, url=url) 

코드는 마지막 줄에 중단하고, submit은 인수로 proxies을 허용하지 않습니다.

+0

명확성을 위해 몇 가지 코드 또는 예를 제공해주십시오. –

답변

1

세션 수준에서 프록시를 지정해야합니다. 그런 다음 그들은 browser.open에 필요하지 않습니다 및 양식을 제출하면 작동합니다

import mechanicalsoup 

proxies = { 
    'https': 'my.https.proxy:8080', 
    'http': 'my.http.proxy:8080' 
} 
url = 'https://stackoverflow.com/' 
browser = mechanicalsoup.StatefulBrowser() 
browser.session.proxies = proxies # THIS IS THE SOLUTION! 
front_page = browser.open(url, verify=False) 
form = browser.select_form('form[action="/search"]') 
form["q"] = "MechanicalSoup" 
result = browser.submit(form, url=url) 
result.status_code 

반환 (200) (즉, "OK").

1

자신의 문서에 따르면,이 작업을해야합니다 :

browser.get(url, proxies=proxy) 

는 귀하의 요청에 '프록시'인수를 전달하십시오.

+0

나는 다음을 본다 : browser.get은 프록시를 받아들이는 requests.Session.get의 래퍼이다. 그러나 여전히 운이 없다. 지금은 "HTTPSConnectionPool (호스트 = 'stackoverflow.com', 포트 = 443) : 최대 재시도 초과했습니다 url :/(SSLError (SSLError ("나쁜 핸드 셰이크 : 오류 ([SSL 루틴 ','ssl3_get_server_certificate ', '인증서 확인에 실패했습니다.')],) ",),))" –

+1

이것은 별개의 문제입니다. verify = False를 함수 인수에 추가하십시오. 경고를 표시하지만 경고 메시지는 표시되지 않습니다. 경고 메시지를 표시하지 않을 수도 있습니다. - browser.get (url, proxies = proxy, verify = False) –