简体   繁体   中英

Can not fill form using python requests

I am trying to fill html form and get the intended result as i get when i fill manually. But I fail.

I am trying to fill the site https://www.desco.org.bd/ebill/login.php with value 32000001 . So far my try is as below-

import requests

#LOGIN_URL  = 'https://www.desco.org.bd/ebill/login.php'
#LOGIN_URL  = 'https://www.desco.org.bd/ebill/authentication.php'
LOGIN_URL  = 'https://www.desco.org.bd/ebill/billinformation.php'

payload = {
    'username': '32000001',
    'login':'Login',
    'login':'true'
}

with requests.Session() as s:
    p = s.post(LOGIN_URL, data=payload)#, verify=False)
    # print the html returned or something more intelligent to see if it's a successful login page.
    print (p.text)

I have found that login.php redirects to authentication.php and it further redirects to billinformation.php which delivers the true data i needed.

Thanks in advance.

NB I am not planning to use selenium since it is too slow for my case ie collect huge data from this site.

i am working for similar case, may be you would try using websockets:

import websockets
def process_function(message):
    # process the message

def server(ws:str, path:int):
    while True:
        message_received = await ws.recv() # receive from ui
        print(f'Msg [{message_received}]')
        message_to_send = process_function(message)
        await ws.send(message_to_send)  # send feedback to ui

server = websockets.serve(server, '127.0.0.1', 5678) # set the html to run in the same ip:port

another try:

import json, requests

def do_auth(url):
    headers = {"Content-Type": "application/json", "Accept":'*/*'}
    body = json.dumps({'username': 'user', 'password': 'pass'})
    r = requests.post(url=url, headers=headers, data=body, verify=False)
    print(r.status_code);     
    d = json.loads(r.text);     
    print(d['access_token']);     
    print(d['refresh_token'])
    return d['access_token'], d['refresh_token']

do_auth(url_auth) # authorization
requests.get(url_content, headers=headers, verify=False)  # get data

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM