Ответ 1
Вы можете передать аргумент history=whatever
, когда вы создаете экземпляр Browser
; значение по умолчанию None
, что означает, что браузер фактически создает класс History
(чтобы разрешить back
и reload
). Самый простой подход (даст исключение ошибки атрибута, если вы когда-либо переводите или перезагружаете):
class NoHistory(object):
def add(self, *a, **k): pass
def clear(self): pass
b = mechanize.Browser(history=NoHistory())
более чистый подход будет реализовывать другие методы в NoHistory
, чтобы дать более четкие исключения при ошибочном использовании браузера back
или reload
, но этого простого должно быть достаточно.
Обратите внимание, что это изящное (хотя и недостаточно хорошо документированное;) использование шаблона проектирования инъекций зависимостей: в мире (bleah) "monkeypatching", ожидается, что клиентский код перезапишет b._history
после того, как браузер будет экземпляр, но с инъекцией зависимостей вы просто проходите в "историческом" объекте, который вы хотите. Я часто утверждал, что Dependency Injection может быть самым важным DP, которого не было в книге "банда 4"!).