В случае, если кто-то снова сталкивается с этим вопросом, я нашел решение:
Хитрость заключается в том, чтобы использовать Механизировать и серию вызовов Browser.submit()
на соответствующих страницах.
Единственное зависание, с которым могут столкнуться и другие, - это то, что страницам ASP.NET (по моему опыту, крупнейшему источнику навигации на основе обратной передачи) также необходим скрытый параметр под названием __EVENTTARGET
в форме, который не будет существовать, когда Вы используете механизировать.
Функция __doPostBack('foo')
на этих страницах присваивает релевантное значение __EVENTTARGET
через событие javascript onclick для каждой из ссылок, но, поскольку механизация не использует javascript, вам необходимо установить эти значения самостоятельно.
Я создал небольшую утилиту для использования в моих скриптах, которая делает это:
def add_event_target(form, target):
#Creates a new __EVENTTARGET control and adds the value specified
#.NET doesn't generate this in mechanize for some reason -- suspect maybe is
#normally generated by javascript or some useragent thing?
form.new_control('hidden','__EVENTTARGET',attrs = dict(name='__EVENTTARGET'))
form.set_all_readonly(False)
form["__EVENTTARGET"] = target
Надеюсь, это полезно для тех, кто, возможно, столкнется с этим вопросом позже.