为了回答您的问题“如何使用 python”,我假设您希望在受 Azure AD 身份验证保护的页面上执行一些网络抓取操作。
在这种情况下,您必须执行以下步骤。
-
对于这个脚本,我们只需要导入以下内容:
导入请求
从 lxml 导入 html
首先,我们要创建会话对象。该对象将允许我们在所有请求中保持登录会话。
session_requests = requests.session()
其次,我们想从网页中提取 csrf 令牌,这个令牌在登录时使用。对于这个示例,我们使用 lxml 和 xpath,我们可以使用正则表达式或任何其他可以提取此数据的方法。
login_url = "https://bitbucket.org/account/signin/?next=/"
result = session_requests.get(login_url)
tree = html.fromstring(result.text)
authenticity_token = list(set(tree.xpath("//input[@name='csrfmiddlewaretoken']/@value")))[0]
接下来,我们要执行登录阶段。在这个阶段,我们向登录 url 发送一个 POST 请求。我们使用在上一步中创建的有效负载作为数据。我们还为请求使用了一个标头,并为相同的 url 添加了一个referer key。
result = session_requests.post(
login_url,
data = payload,
headers = dict(referer=login_url)
)
有效负载将是用户名和密码等的字典对象。
payload = {
"username": "<USER NAME>",
"password": "<PASSWORD>",
"csrfmiddlewaretoken": "<CSRF_TOKEN>"
}
注意:-这只是一个例子。
第 2 步:
抓取内容
现在,我们能够成功登录,我们将执行实际的抓取
url = 'https://bitbucket.org/dashboard/overview'
result = session_requests.get(
url,
headers = dict(referer = url)
)
也就是说,您需要从 Azure AD 获取请求详细信息有效负载,然后使用 login 方法创建会话对象,最后进行抓取。
这是一个很好的安全网站网络抓取示例。
希望对你有帮助。