如何登录网站并打印来源?

时间:2013-06-24 18:40:29

标签: python python-3.x urllib python-requests

如何登录www。###。nl / admin并打印源?

我尝试了几件事。

以下是我最近使用请求尝试的内容:

import requests

url = "http://www.###.nl/admin"
r = requests.get(url, auth=('***', '***'))
page = r.text

print(page)

此代码只打印出登录页面的代码。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

检查此页面的来源,并确定正在提交的表单元素(您可以使用Chrome开发者工具来实现此目的)。然后,您可以找到input元素并确定所需的name属性。

一个例子(未经测试):

import requests
payload = {
'username': 'USERNAME', 
'password': 'PASSWORD'
}
url = 'http://www.fonexshop.nl/admin/index.php?route=common/login'
r = requests.post(url, data=payload)
print r.text

查看请求库here的文档。

更新(如果网站使用Cookie)

来自documentation wiki

  

Session对象允许您跨越某些参数   要求。它还会在所有请求中保留cookie   会话实例。

这是另一个例子:

from requests import session

payload = {
    'action': 'login',
    'username': USERNAME,
    'password': PASSWORD
}

with session() as c:
    c.post('http://www.fonexshop.nl/admin/index.php?route=common/login', data=payload)
    request = c.get('http://www.fonexshop.nl/the/page/you/want/to/view/source/for.php')
    print request.headers
    print request.text

希望这会有所帮助。祝你好运!

答案 1 :(得分:1)

了解您是否需要登录javascript或查看数据(在浏览器中禁用javascript并尝试手动登录)。如果需要javascript,那么您可以使用类似Selenium Webdriver的内容来获取包含javascript生成内容的页面。或者使用wireshark之类的网络嗅探器来查找您的浏览器发送的请求,然后尝试使用requests库复制它们。

您可以使用multipart/form-data内容类型发送帖子请求,您可以在/admin页面的html源代码中看到该内容类型。建立在@Amal Murali's answer

#!/usr/bin/env python3
import sys
from requests import session  # pip install requests

credentials = dict(username='your username', password='your password')
login_url = 'http://www.fonexshop.nl/admin/index.php?route=common/login'

with session() as s:
    r = s.post(login_url, files=credentials)
    # print some debugging info
    print("Post status: {}".format(r.status_code), file=sys.stderr)
    print(r.headers, file=sys.stderr)
    print("Cookies: {}".format(dict(r.cookies)), file=sys.stderr)

    r = s.get('http://www.fonexshop.nl/' + 'path you actually want')
    print("Get status: {}".format(r.status_code), file=sys.stderr)
    print(r.headers, file=sys.stderr)
    print(r.text) # print the web page source to stdout

注意:使用files代替data生成multpart/form-data请求而不是x-www-form-urlencoded

答案 2 :(得分:1)

我使用Splinter开始工作。

Phantomjs(无头WebKit)用作浏览器。您也可以使用其他浏览器,查看documentation了解Splinter。

这是工作代码:

from splinter import *
from selenium import *

username1 = '***'
password1 = '***'

browser1 = Browser('phantomjs')
browser1.visit('http://***.nl/admin')
browser1.fill('username', username1)
browser1.fill('password', password1)
browser1.click_link_by_text('Inloggen')

url1 = browser1.url
title1 = browser1.title

titlecheck1 = 'Dashboard'

print "Step 1 (***):"

if title1 == titlecheck1:
    print('Succeeded')

else:
    print('Failed')
    browser1.quit()

print 'The source is:'
print browser1.html

browser1.quit()