2017-07-07 79 views
1

我有一个Python 2的脚本,用于登录到网页,然后向内移动以访问指向同一网站但指向不同页面的几个文件。 Python 2让我用我的凭证打开网站,然后创建一个opener.open()以保持可用的连接导航到其他页面。登录一个网站并浏览另一个页面

下面是在Python 2工作代码:

$Your admin login and password 
LOGIN = "*******" 
PASSWORD = "********" 
ROOT = "https:*********" 

#The client have to take care of the cookies. 
jar = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar)) 

#POST login query on '/login_handler' (post data are: 'login' and 'password'). 
req = urllib2.Request(ROOT + "/login_handler", 
         urllib.urlencode({'login': LOGIN, 
             'password': PASSWORD})) 
opener.open(rep) 

#Set the right accountcode 

for accountcode, queues in QUEUES.items(): 
    req = urllib2.Request(ROOT + "/switch_to" + accountcode) 
    opener.open(req) 

我需要做在Python 3我与请求模块和urllib的尝试同样的事情,但我虽然可以建立在第一次登录,我不知道如何保持开启者浏览网站。我找到了OpenerDirector,但似乎我不知道该怎么做,因为我还没有达到我的目标。

我已经使用这个Python 3代码来获得所需的结果,但不幸的是我无法获得csv文件来打印它。 enter image description here

+0

请出示你的Python 3代码和错误你 –

回答

0

问题:我不知道如何保持开启器浏览网站。

的Python 3.6»文档urllib.request.build_opener

使用基本的HTTP认证:

import urllib.request 
# Create an OpenerDirector with support for Basic HTTP Authentication... 
auth_handler = urllib.request.HTTPBasicAuthHandler() 
auth_handler.add_password(realm='PDQ Application', 
         uri='https://mahler:8092/site-updates.py', 
         user='klem', 
         passwd='kadidd!ehopper') 

opener = urllib.request.build_opener(auth_handler) 

# ...and install it globally so it can be used with urlopen. 
urllib.request.install_opener(opener) 
f = urllib.request.urlopen('http://www.example.com/login.html') 
csv_content = f.read() 
+0

我的问题是因为我必须在继续浏览该网站使用的用户名和密码,然后日志后(这就是为什么揭幕战)和然后下载文件。 –

+0

检查我的评论如下.. –

+0

_ **它没有工作** _没有帮助,检查响应错误或代码你。你是否已经认识到登录成功了? **请**不要使用“答案”作为您的评论,相应地编辑您的问题。 **请不要使用图片[编辑]您的问题添加您当前的'Python3'。 – stovfl

0

使用Python请求库为Python 3和会话。 http://docs.python-requests.org/en/master/user/advanced/#session-objects

一旦你登录你的会话将被自动管理。你不需要创建你自己的饼干罐。以下是示例代码。

s = requests.Session() 
auth={"login":LOGIN,"pass":PASS} 
url=ROOT+/login_handler 
r=s.post(url, data=auth) 
print(r.status_code) 
for accountcode, queues in QUEUES.items(): 
    req = s.get(ROOT + "/switch_to" + accountcode) 
    print(req.text) #response text 
+0

不幸的是,它也没有工作,我开始阅读之前无法完成所需的登录。 –

+0

您是否适当地更改了参数?用户名和密码。 – specialscope

+0

是的,我做了,但看起来我无法完成认证。密码和用户都可以,因为每次我尝试用我的浏览器工作 –

相关问题