How can I login to a website with Python?
Maybe you want to use twill. It's quite easy to use and should be able to do what you want.
It will look like the following:
from twill.commands import *
go('http://example.org')
fv("1", "email-email", "blabla.com")
fv("1", "password-clear", "testpass")
submit('0')
You can use showforms()
to list all forms once you used go…
to browse to the site you want to login. Just try it from the python interpreter.
How to log in to a website using Python's Requests module?
If the information you want is on the page you are directed to immediately after login...
Lets call your ck
variable payload
instead, like in the python-requests docs:
payload = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}
url = 'http://www.locationary.com/home/index2.jsp'
requests.post(url, data=payload)
Otherwise...
See https://stackoverflow.com/a/17633072/111362 below.
How to login to a website by using Python
Perhaps it is expecting User
not username
:
url = 'http://12.345.67.891:8000/login'
values = {'User': 'abcdefg',
'password': 'apple'}
r = requests.post(url, data=values)
print(r.content)
Login to website using python requests
As said above, you should send values of all fields of form. Those can be find in the Web inspector of browser. This form send 2 addition hidden values:
url = "https://www.voxbeam.com//login"
data = {'userName':'xxxxxxxxx','password':'yyyyyyyyy','challenge':'zzzzzzzzz','hash':''}
# note that in email have encoded '@' like uuuuuuu%40gmail.com
session = requests.Session()
r = session.post(url, headers=headers, data=data)
Also, many sites have protection from a bot like hidden form fields, js, send encoded values, etc. As variants you could:
1) Use a cookies from manual login:
url = "https://www.voxbeam.com"
headers = {'user-agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36"}
cookies = {'PHPSESSID':'zzzzzzzzzzzzzzz', 'loggedIn':'yes'}
s = requests.Session()
r = s.post(url, headers=headers, cookies=cookies)
2) Use module Selenium:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
url = "https://www.voxbeam.com//login"
driver = webdriver.Firefox()
driver.get(url)
u = driver.find_element_by_name('userName')
u.send_keys('xxxxxxxxx')
p = driver.find_element_by_name('password')
p.send_keys('yyyyyyyyy')
p.send_keys(Keys.RETURN)
How to Login to a website and hit any url and get the response by using Python
You will probably need to look into how the authentication mechanism works in HTTP. It's most likely that your server is returning either a cookie or some sort of other identification header. Cookies are easiest because the browser will (to a first approximation) automatically return the cookies it gets form a server when making further requests. Your existing code isn't doing that.
Since you are using the requests
library you should look at the answer to this question, which might shed some light on the problem.
Related Topics
Problem with Multi Threaded Python App and Socket Connections
Repeat Rows in a Pandas Dataframe Based on Column Value
Get a Function Argument's Default Value
Pycharm Doesn't Recognise Installed Module
Splitting a List Based on a Delimiter Word
Python: Urlerror: <Urlopen Error [Errno 10060]
Cannot Concatenate 'Str' and 'Float' Objects
Collision Between Masks in Pygame
How to Scroll Frame Using Mouse Wheel & Adding Horizontal Scrollbar
Log into Gmail Using Selenium in Python
How to Make Image/Images Disappear in Pygame
What Is _Future_ in Python Used for and How/When to Use It, and How It Works