关于python获取https页面的认证问题

本文介绍了如何使用Python的urllib库实现网站登录并访问特定页面的过程,包括设置cookie、构造请求参数和发送HTTP请求等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

举例为证:

#!/usr/bin/env python
#coding=utf-8
import urllib
import sys
import http.cookiejar


cookie = http.cookiejar.CookieJar()                                        #保存cookie,为登录后访问其它页面做准备
cjhdr  =  urllib.request.HTTPCookieProcessor(cookie)             
opener = urllib.request.build_opener(cjhdr)

url = "https://atlassianwave.web.alcatel-lucent.com/jira/browse/SDM-2335"
postdata = {'os_username': 'wenlongg', 'os_password': '1qazxsw@', 'login':''}          #用户名、密码和此时最为关键; 注意手动在IE里查看源码获取出来


#print (urlopen(url).read().decode("gbk"))                              #输出登录页面    


params = urllib.parse.urlencode(postdata).encode(encoding="UTF8")                            #将用户名、密码转换为 “username=admin&pwd=123456”的形式
opener.open(url,params)                                                     #开始登录
html=opener.open("https://atlassianwave.web.alcatel-lucent.com/jira/browse/SDM-2335").read().decode("gbk")   #登录成功后,访问其它页面
file=open('./sdm-2335.txt','w')
file.write(html)

<think>首先,用户的问题是:“我想查找如何用Python获取当前网页的网址请问python获取当前网页url的方法”。意思是他们想知道如何用Python获取当前网页的URL。现在,回顾系统级指令:-所有行内数学表达式必须用$...$格式。-独立公式用$$...$$。-LaTeX语法正确。-使用中文回答。-生成相关问题。-在引用的段落末尾自然地添加引用标识。另外,用户提供了一些站内引用:-引用[1]:展示了用Selenium在Python获取当前页面URL。-引用[2]:讨论了用Python获取页面内所有链接的方法,包括Selenium。-引用[3]:似乎是获取URL的错误处理。用户说这些引用仅供参考,我应该参考用户上一次的问题和我的回答。但用户没有提供上一次的问题,所以我只能基于当前查询。用户当前的查询是明确地问“python获取当前网页url的方法”,所以我要直接回答这个。从引用的内容中:-引用[1]显示了:`cur_url=driver.current_url`,这是用Selenium获取当前URL。-引用[2]有类似的方法:`driver.current_url`或通过`driver.find_elements_by_tag_name("a")`但那是针对链接的。-引用[3]似乎是错误处理。Selenium是web自动化工具,常用于获取和操作网页元素,包括URL。其他方法可能包括使用Python的requests库或urllib来获取URL,但那是在发出请求时指定的URL,而不是获取当前页面的URL。如果用户已经在浏览器中,或者在运行一个脚本,Selenium是最合适的,因为它模拟浏览器行为。总结方法:1.使用Selenium:如引用[1]所示,`current_url`属性。2.使用requests或urllib:如果是从头开始获取网页,URL是请求的一部分;要获取最终的URL(考虑重定向),可以使用`response.url`。用户说的是“当前网页”,可能意味着他们已经在运行一个脚本或在测试环境中。在回答中:-使用中文回答。-结构清晰。-引用相关内容时加引用标识。-生成相关问题。结构化回答:1.介绍常见方法。2.详细描述方法。3.提供示例代码。4.结尾添加相关问题。代码示例要格式化,如系统示例所示。示例方法:-使用Selenium:`driver.current_url`-使用requests:`response.url`引用[1]和[2]提到了Selenium,所以我可以参考它们。最终回答应包括:-方法解释。-代码片段。-相关问题。相关问题生成:-类似系统示例的格式。-例如:如何用其他库获取?如何处理认证?等等。相关问题想法:1.Selenium中如何切换到iframe获取URL?2.如何用Python的其他库获取URL?3.获取URL后如何解析或使用?4.常见错误如何处理?5.性能优化或测试中的应用?回答中的引用:如果我提到基于引用[1]或[2]的内容,在相关句子末尾加[^1]或[^2]。例如:"使用Selenium获取当前页面URL非常简单,只需访问`driver.current_url`属性[^1]。"确保LaTeX格式:用户的问题中可能有数学表达式吗?这里是获取URL,可能不需要,但以防万一,如果有变量等用$...$。生成相关问题:在最后添加§§相关问题§§部分。</think> ### Python 获取当前网页URL的方法 在Python获取当前网页的URL是常见需求,尤其在网页自动化测试(如Selenium)或数据爬取场景中。以下是两种主流方法,基于您提供的引用内容[^1][^2],我总结出可靠、易实现的方案。其中,Selenium是最推荐的用于交互式浏览的工具,而requests库更适合非交互式HTTP请求。下面我逐步解释并提供代码示例。 --- ### 1. **使用Selenium获取当前URL** Selenium是一个强大的浏览器自动化库,可以模拟真实浏览器行为,包括获取当前加载页面的URL。这在网页测试或需要JavaScript渲染的场景中特别有用。 - **方法核心**:通过`driver.current_url`属性获取当前页面的完整URL。 - **优点**:能处理动态网页、重定向和JavaScript加载内容。 - **缺点**:需要安装浏览器驱动(如Firefox或Chrome),占用资源较多。 **代码示例**(参考引用[^1],基于Python): ```python from selenium import webdriver import time # 初始化浏览器驱动(这里以Firefox为例) driver = webdriver.Firefox() driver.get("https://www.baidu.com") # 打开目标网页 # 等待页面加载完成(可选,避免获取URL时页面未就绪) driver.implicitly_wait(10) # 隐式等待10秒 # 获取当前页面URL current_url = driver.current_url print(f"当前网页URL: {current_url}") # 输出URL # 断言验证(如测试中比较预期URL) expected_url = "https://www.baidu.com/" assert expected_url in current_url, "URL不匹配" # 如果URL不符,抛出异常 # 关闭浏览器 driver.quit() ``` - **说明**: - `driver.get()`加载目标网页后,`current_url`返回当前实际URL(可能因重定向改变)。 - 使用`implicitly_wait()`确保页面加载完成,防止获取到初始URL而非最终URL[^1]。 - 这段代码适合单元测试框架(如unittest),验证页面是否按预期加载。 **注意事项**: - 如果网页包含iframe(嵌入式框架),获取iframe内的URL需要额外处理:先切换到iframe上下文(如`driver.switch_to.frame(frame_element)`),然后再用`driver.current_url`获取[^2]。 - 安装Selenium:使用`pip install selenium`,并下载对应浏览器驱动(如GeckoDriver for Firefox)。 --- ### 2. **使用requests库获取最终URL(非交互式场景)** 如果您只是通过HTTP请求获取网页内容(不需要浏览器渲染),requests库更轻量高效。它会自动处理重定向,并通过响应对象返回最终URL。 - **方法核心**:使用`response.url`属性获取重定向后的URL。 - **优点**:轻量级,适合爬虫或简单网页分析。 - **缺点**:无法处理JavaScript动态内容,仅限于静态页面。 **代码示例**: ```python import requests # 发送HTTP GET请求 url = "http://example.com" # 初始URL response = requests.get(url) # 自动处理重定向 # 获取重定向后的最终URL current_url = response.url print(f"最终URL: {current_url}") # 输出重定向后的URL # 解析网页内容(可选,如获取标题) print(f"状态码: {response.status_code}") # 确保请求成功 print(f"页面标题: {response.text.split('<title>')[1].split('</title>')[0]}") ``` - **说明**: - `requests.get()`会跟随重定向,`response.url`返回实际加载的URL。 - 此方法不涉及浏览器,只处理HTTP响应,适合批量获取URL或简单网页监测[^3]。 - **安装requests**:使用`pip install requests`。 --- ### 总结与建议 - **推荐场景**: - 需要浏览器交互(如点击、表单提交):优先使用Selenium的`driver.current_url`[^1]。 - 仅需URL且页面静态:选择requests的`response.url`。 - **常见错误处理**: - URL获取失败时(如网络错误),添加异常捕获(try-except块)。例如,在Selenium中使用`WebDriverException`捕获浏览器异常[^1][^3]。 - 如果URL包含特殊字符,确保在比较或存储时使用`urllib.parse.quote()`编码以避免问题[^2]。 - **性能提示**:Selenium较慢,如果频繁操作,建议用headless模式(无界面)优化资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值