2017-04-02 16 views
0

私はウェブページを介してログインする必要があるケーブルインターネットを持っています。毎日8時と12時にそれがリセットされるのは面倒です。私はログインプロセスを自動化するpythonスクリプトを書こうと思っていました。私はこれまで多くのStackOverflowソリューションを読んできましたが、何も機能していませんでした。私は試しましたRequestsTwillRoboBrowserなど私のローカルインターネットページにPythonを使用して自動ログイン

私はdoLogin()ajaxスクリプトは、ログインボタンによって起動されました。ここには完全なpage sourceがあります。ソリューション

私はこの問題を解決するためにセレンwebdriverを使用:以下

import requests 

# Fill in your details here to be posted to the login form. 
payload = { 
    'action': 'http://10.10.0.1/login', 
    'actualusername': 'username', 
    'actualpassword': 'password' 
} 

# Use 'with' to ensure the session context is closed after use. 
with requests.Session() as s: 
    p = s.post("http://103.251.83.134/captiveportal/Default.aspx", data=payload) 
    # print the html returned or something more intelligent to see if it's a successful login page. 
    print p.text 

    # An authorised request. 
    #r = s.get('http://www.google.com') 
    #print r.text 

EDITを失敗した私の実装の1つです。答えをチェック。

答えて

1

を使用して、両方のページにログイン情報を提出するようにコードを修正しようとするだろう:)ダウンロードパスにchromedriverは、2時間変数を作成し、時間ごとに分をチェックし、お使いのブラウザはautorizathionを通過するのログイン時間」で、その場合

from selenium import webdriver 

def Authorization_for_broadband(): 
    driver = webdriver.Chrome("C:\YOURPATHTO\CHROMEDRIVER.EXE") 

    driver.get('http://10.10.0.1/login') 
    driver.find_element_by_xpath('//*[@id="username"]').send_keys('USERNAME') 
    driver.find_element_by_xpath('//*[@id="password"]').send_keys('PASSWORD') 
    driver.find_element_by_xpath('//*[@id="btnLogin"]').click() 
    driver.close 
while(1): 
    if time=='your-login-period1' or time == 'your-login-period2': 
     Authorization_for_broadband() 
+0

も、この答えを読む前に、私はまさに、この今日実装します!これを投稿していただきありがとうございます。私はwebdriver.Firefox()を使用しました。どちらがうまくいくの?私はどこかで読んだように、私はPhantomJSを試してみるために、プロセスが静かであることを望んだ。誰にでも必要な場合は、私はこの受け入れられた解決策を作ります! –

0

あなたのURLが間違っている可能性があります。ソースコードを見ると、HTMLフォームがhttp://10.10.0.1/loginページにデータを投稿してからdoLogin()関数がデータをRegister.aspx?CheckCustomerStatus=1に送信しているように見えます。

また、ペイロードには変数actionが含まれており、あなたはSessionオブジェクトを使用していますが、これは必要ではないと思います。

それは、私がアクセスすることはできませんローカルログインページなので、私はそれをテストすることはできませんが、私はセレンを使用して単純POST request