Python:使用Mechanicalsoup保持登录网站的状态

时间:2019-08-21 18:39:38

标签: python python-3.x authentication mechanicalsoup stay-logged-in

我是Python的新手。我想在python中编写一个脚本,在其中运行数千个URL并保存响应。为了访问这些URL,需要凭据。因此,我编写了一个基本脚本,该脚本转到URL并打印响应。当我浏览多个URL时,网站返回多个用户登录的错误。因此,我想登录一次并在同一登录会话中运行其他URL。有什么办法可以使用机械汤做到这一点。

这是我的剧本:

import mechanicalsoup

browser = mechanicalsoup.StatefulBrowser()
browser.open("mywebsite1")

browser.select_form('form[action="/login"]')
browser.get_current_form().print_summary()
browser["userId"] = "myusername"
browser["password"] = "mypassword"

response = browser.submit_selected()
browser.launch_browser()
print(response.text)
browser.open("mywebsite2")
print(response.text)
...... so on for all the URLs

如何保存会话?预先感谢您的帮助

1 个答案:

答案 0 :(得分:1)

只需保存并加载session.cookies

def save_cookies(browser):
    return browser.session.cookies.get_dict()

def load_cookies(browser, cookies):
    from requests.utils import cookiejar_from_dict
    browser.session.cookies = cookiejar_from_dict(cookies)

browser = mechanicalsoup.StatefulBrowser()
browser.open("www.google.com")

cookies = save_cookies(browser)
load_cookies(browser, cookies)