webdriver使用已開啟過的chrome

2021-10-10 09:49:10 字數 2798 閱讀 5768

基本功能:

執行指令碼a,開啟乙個chrome,指令碼a執行完成,chrome未關閉。

執行指令碼b,繼續使用a開啟的chrome,不新啟瀏覽器。

附加:

如果已開啟的chrome未關閉,則在chrome中新建標籤頁來開啟新的頁面。

如果已開啟的chrome已關閉,則新啟瀏覽器。

最近用python+selenium+pytest,寫了個測試小工具用來自動化登陸瀏覽器,一方面是方便管理**、賬號、密碼,存放在指令碼中,另一方面也省去了頻繁輸入登陸**的操作,節省了不少時間。

但這個小工具用起來存在明顯問題:每次都新啟乙個瀏覽器,多了後就是這樣的

根本不知道誰是誰。

於是就想到要實現前面提到的這些功能。

driver = webdriver.chrome()

params["session_id"] = driver.session_id

params["server_url"] = driver.command_executor._url

driver = webdriver.remote(command_executor=params["server_url"])

driver.session_id = params["session_id"]

經過試驗,python存在乙個坑是每次初始化就會調start_session去新開乙個空白的瀏覽器。網上有解決方案是繼承remote,重寫start_session方法。然而,仔細看完**就發現,何必多此一舉,直接quit()就搞定。

driver = webdriver.remote(command_executor=params["server_url"])

driver.quit() # 退出start_session新開的空白瀏覽器

driver.session_id = params["session_id"]

quit是quit了,但driver還存在呀,所以還是多理清思路,才能避免走冤枉路。

然後要解決的第二個問題就是,如何在執行指令碼b的時候再接著用session。當然就是存本地咯。這裡用到的是pickle,能很方便的在本地訪問變數。

with open(session_file, 'wb') as f:

pickle.dump(params, f)

with open(session_file, 'rb') as f:

params = pickle.load(f)

第三個問題就是新開標籤頁和切換視窗。

driver.execute_script('window.open("");')  # 調js

driver.switch_to.window(driver.window_handles[-1]) # 切換到最後乙個頁籤

最後要解決的乙個問題就是,如果已經開啟的chrome關掉了,從本地檔案讀取的session就會過時。拿這個過時session去用,就會」chrome not reachable「。解決思路就是,捕獲driver丟擲的webdriverexception,重新建立新的driver。

try:

driver = webdriver.remote(command_executor=params["server_url"])

driver.quit() # 退出start_session新開的空白瀏覽器

driver.session_id = params["session_id"]

driver.execute_script('window.open("");')

driver.switch_to.window(driver.window_handles[-1])

except:

driver = create_driver()

完整**

session_file = 'browser_session.data'

def create_driver():

driver = webdriver.chrome()

with open(session_file, 'wb') as f:

params =

pickle.dump(params, f)

return driver

if not path(session_file).exists():

driver = create_driver()

else:

with open(session_file, 'rb') as f:

params = pickle.load(f)

try:

driver = webdriver.remote(command_executor=params["server_url"])

driver.quit() # 退出start_session新開的空白瀏覽器

driver.session_id = params["session_id"]

driver.execute_script('window.open("");')

driver.switch_to.window(driver.window_handles[-1])

except:

driver = create_driver()

使用php指令碼檢視已開啟的擴充套件

php安裝時會將擴充套件包編譯進去,對於乙個正在執行中的資料庫,檢視php的擴充套件開啟狀況,第一種方式是通過配置檔案檢視,另外是通過phpinfo函式檢視所有的配置,另外是使用php內建函式來檢視,通過指令碼輸出來檢視,如下 print r get loaded extensions 通過get ...

如何使用QT開啟已存在的ROS工作空間

版本資訊 qt creator 4.4.1 based on qt 5.9.1 gcc 4.9.64bit ros indigo 修改待開啟的ros工作空間下的catkin make src cmakelists.txt檔案 因為此檔案只是乙個鏈結檔案,不修改的話編譯會出現 找不到catkin軟體包...

selenium控制已開啟的頁面

chrome.exe remote debugging port 5555 user data dir c selenum setting remote debugging port值,可以指定任何開啟的埠。user data dir標記,指定建立新chrome配置檔案的目錄。它是為了確保在單獨的配...