1. 程式人生 > >我是如何實現用selenium進行模擬登陸的

我是如何實現用selenium進行模擬登陸的

這是一個艱難而有趣的過程
就像
在升級打怪通關一樣

  1. 下載
    https://blog.csdn.net/weixin_41777219/article/details/84935474

  2. 驗證是否登陸成功

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步

  1. 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() 要刪去
  1. 搞定