这里是我的代码的精简版,呈现出的webdriver和mitmproxy一个问题:奇怪的webdriver问题与Mitmproxy
from libmproxy import controller
from libmproxy import proxy
import os
from multiprocessing import Process
from selenium import webdriver
from selenium.webdriver.common.proxy import *
import time
# traffic inception
class HttpMitmReporter(controller.Master):
def __init__(self, proxy_server):
controller.Master.__init__(self, proxy_server)
def run(self):
try:
return controller.Master.run(self)
except KeyboardInterrupt:
self.shutdown()
# setup browser with proxy settings etc.
def setup_browser():
global driver
proper_setup = False
proxy_con = "127.0.0.1:8088"
my_proxy = Proxy({'proxyType': ProxyType.MANUAL,
'httpProxy': proxy_con,
'ftpProxy': proxy_con,
'sslProxy': proxy_con,
'noProxy': ''})
while not proper_setup:
try:
driver = webdriver.Firefox(proxy=my_proxy)
driver.set_page_load_timeout(20)
driver.set_script_timeout(20)
proper_setup = True
except Exception as exception:
print exception
try:
driver.quit()
except Exception:
time.sleep(3)
driver = None
# start proxy
config = proxy.ProxyConfig(
cacert=os.path.expanduser("~/.mitmproxy/mitmproxy-ca.pem")
)
server = proxy.ProxyServer(config, 8088)
reporter = HttpMitmReporter(server)
mitm_proxy = Process(target=reporter.run)
mitm_proxy.start()
setup_browser()
# urls to test
urls = [
'http://support.microsoft.com/common/survey.aspx?showpage=1&scid=sw%3Bde%3B3663&altStyle=narrow&renderOption=OverrideDefault&fr=1',
'http://outlook.com/',
]
# visit sites
for url in urls:
print url
try:
driver.get(url)
elements = driver.find_elements_by_tag_name('a')
except Exception as ex:
print ex
driver.quit()
setup_browser()
# terminate browser and proxy
driver.quit()
mitm_proxy.terminate()
如果执行这个你应该看到Firefox的加载永远outlook.com和超时是从未触发。
该问题只发生在mitmproxy。我测试了另一个代理,他们在这些URL上工作,但我无法使用它们,因为它们无法检查SSL流量或仅提供原始数据输出。不过,我认为mitmproxy应该是最好的解决方案,如果它能与webdriver一起正常工作。
而且我已经测试这与mitmproxy开始壳 - >同样的问题
,并与Java的webdriver - >同样的问题
而且这种情况在其他网址一样,有时fc2.com。
这里是我的配置有点概述:
- Linux Mint的佩特拉64
- 蟒蛇2.7
- Mitmproxy 0.10.1
- 硒2.41.0
- 火狐28
有谁知道如何解决这个问题?
为什么这只是与mitmproxy发生?
此外,我感兴趣的替代方案检查http和https与硒流量。
更新与FlowMaster系统:
from libmproxy import flow
from libmproxy import proxy
import os
from multiprocessing import Process
from selenium import webdriver
from selenium.webdriver.common.proxy import *
import time
# traffic inception
class HttpMitmReporter(flow.FlowMaster):
def run(self):
try:
flow.FlowMaster.run(self)
except KeyboardInterrupt:
self.shutdown()
def handle_request(self, r):
f = flow.FlowMaster.handle_request(self, r)
if f:
r.reply()
return f
def handle_response(self, r):
f = flow.FlowMaster.handle_response(self, r)
if f:
r.reply()
return f
# setup browser with proxy settings etc.
def setup_browser():
global driver
proper_setup = False
proxy_con = "127.0.0.1:8088"
my_proxy = Proxy({'proxyType': ProxyType.MANUAL,
'httpProxy': proxy_con,
'ftpProxy': proxy_con,
'sslProxy': proxy_con,
'noProxy': ''})
while not proper_setup:
try:
driver = webdriver.Firefox(proxy=my_proxy)
driver.set_page_load_timeout(20)
driver.set_script_timeout(20)
proper_setup = True
except Exception as exception:
print exception
try:
driver.quit()
except Exception:
time.sleep(3)
driver = None
# start proxy
config = proxy.ProxyConfig(
cacert=os.path.expanduser("~/.mitmproxy/mitmproxy-ca.pem")
)
state = flow.State()
server = proxy.ProxyServer(config, 8088)
reporter = HttpMitmReporter(server, state)
mitm_proxy = Process(target=reporter.run)
mitm_proxy.start()
setup_browser()
# urls to test
urls = [
'http://support.microsoft.com/common/survey.aspx?showpage=1&scid=sw%3Bde%3B3663&altStyle=narrow&renderOption=OverrideDefault&fr=1',
'http://outlook.com/',
]
# visit sites
for url in urls:
print url
try:
driver.get(url)
elements = driver.find_elements_by_tag_name('a')
except Exception as ex:
print ex
driver.quit()
setup_browser()
# terminate browser and proxy
driver.quit()
mitm_proxy.terminate()
我按照您的建议(请参阅更新)使用FlowMaster更改了我的代码,但发生同样的问题。顺便说一句,Firefox已经更改为版本29. – Thorben
如果您从外部浏览器使用它,代理是否可以正常工作? –
如果我使用外部浏览器https不工作(与安装的CA)并且发生相同的问题。但是如果我使用控制器istead流https是工作,并没有问题在外部的FF。 – Thorben