我是如何實現用selenium進行模擬登陸的
阿新 • • 發佈:2019-01-08
這是一個艱難而有趣的過程
就像
在升級打怪通關一樣
from selenium import webdriver import time # 無介面除錯需要的(當有介面除錯時就把這一小塊去掉) from pyvirtualdisplay import Display display = Display(visible=0, size=(800, 600)) # 不用這個會報錯:Process unexpectedly closed with status 1 display.start() driver = webdriver.Firefox() driver.get("某網站的login網址") # 登入頁面 time.sleep(20) driver.switch_to.frame('alibaba-login-box') # 獲取動態網頁程式碼的關鍵 time.sleep(10) driver.find_element_by_id('fm-login-id').send_keys('使用者名稱') time.sleep(10) driver.find_element_by_id('fm-login-password').send_keys('密碼') time.sleep(10) driver.find_element_by_id('fm-login-submit').click() time.sleep(30) cookies = driver.get_cookies() print(driver.current_url) # 登陸成功之後一般頁面會跳轉 # print(driver.page_source) driver.close()
然後,很遺憾!我輸出的current_url並沒有跳轉
到底是哪裡出了問題呢!好想看到模擬登陸的執行過程!(因為我是遠端除錯,所以在本地看不到伺服器端的firefox的執行介面)
那就進入第3步
- ubuntu伺服器的視覺化
3.1 下載配置,我的這個記錄裡面提到教程(有點繞哈哈)
https://blog.csdn.net/weixin_41777219/article/details/85018675
ok,該下載的下載完了
3.2 DISPLAY的配置
知識:在linux系統中,DISPLAY用來設定系統的圖形介面顯示到何處
具體如下:
ssh連線到伺服器後
可以先檢視當前的DISPLAY
echo $DISPLAY
一次性設定(下次登入就無效了)
export DISPLAY=localhost:3 # 這個上就是上面連結中 vncserver :3 的3,要一致
永久設定
cd ~
vi ~/.bashrc
輸入或修改
export DISPLAY=localhost:3
3.2 測試
把上面的程式碼去掉 “無介面除錯” 的那一小塊,儲存,upload到伺服器上。
然後在本地Ubuntu的終端ssh連線伺服器,並執行這段程式碼。具體看截圖:
把上圖在pycharm中,複製畫紅線後面的部分到終端中執行,如下圖:
然後,模擬登陸的過程就會出現在vnc的介面中啦!(當然,此時你的vnc要開著,連線好)
3.3 pycharm上執行
有一個問題,就是為什麼不可以直接在pycharm上執行呢?
這個還是涉及到介面,跟DISPLAY的問題。目前沒搞懂
但是,確定程式碼沒錯之後
沒有介面也沒關係啊!
所以再用最上面的程式碼直接再pycharm執行一遍!
還是無法進行頁面跳轉!可能是pyvirtualdisplay的關係?
後來,換了一個方法,把那一小塊程式碼替換為:
from selenium.webdriver import FirefoxOptions
opts = FirefoxOptions()
opts.add_argument("--headless")
driver = webdriver.Firefox(firefox_options=opts)
# 注意:最上面的程式碼的driver = webdriver.Firefox() 要刪去
- 搞定