Web自動化之Selenium控制已經打開的瀏覽器(Chrome,Edge)

????????在使用selenium進行web自動化或爬蟲的時候,經常會面臨登錄的情況,對于這種情況,我們可以利用Selenium控制已經打開的瀏覽器,從而避免每次都需要重新打開瀏覽器并進行登錄的繁瑣步驟。????

目錄

說明

啟動瀏覽器

?注意

--user-data-dir說明

?代碼設定

代碼

改進代碼

效果

直接使用webdriver

使用指定端口打開的瀏覽器

說明


????

說明

????????這里已打開的瀏覽器不是指我們在桌面雙擊打開的瀏覽器,而是指我們在命令行中指定端口號啟動的瀏覽器,直接控制我們先前桌面雙擊打開的瀏覽器內的網頁不可行(已驗證)。

啟動瀏覽器

啟動瀏覽器時,我們需要使用CMD命令行來使瀏覽器在指定端口啟動

start chrome --remote-debugging-port=9222 
#或者
start chrome --remote-debugging-port=9222 --user-data-dir='一個空文件夾的路徑'#說明
#其余端口也可以,只要沒被占用過就行
#--user-data-dir非必須

在9222端口啟動chrome瀏覽器?

start msedge --remote-debugging-port=9222 
#或者
start msedge --remote-debugging-port=9222 --user-data-dir='一個空文件夾的路徑'#說明
#其余端口也可以,只要沒被占用過就行
#--user-data-dir非必須

在9222端口啟動Edge瀏覽器

?注意

1.上述命令行啟動的瀏覽器和我們直接在桌面上雙擊瀏覽器圖標啟動的瀏覽器沒有任何差別,只是在我們設定的端口號運行而已。

? ? ? ? ? ?通過CMD命令(不加--user-data-dir)啟動的chrome瀏覽器

--user-data-dir說明

--user-data-dir用來指定從命令行啟動的瀏覽器的用戶數據路徑,以chrome瀏覽器為例,

????????不加--user-data-dir的話,我們每一次從該端口啟動的chrome瀏覽器的用戶數據將直接來源于本機上的原本的chrome瀏覽器內的用戶數據

start chrome --remote-debugging-port=9222 

????????加上--user-data-dir的話,我們第一次運行下方的CMD命令將會發現:

start chrome --remote-debugging-port=9222 --user-data-dir='一個文件夾的路徑'

????????從該端口啟動的chrome瀏覽器將和初始化的chrome瀏覽器一樣,沒有任何用戶數據,也將沒有收藏書簽頁。

????????這是因為指定的路徑下userdata數據為空,不過在這一次設定好之后,我們再使用上方的CMD命令,每次打開的chrome瀏覽器又會和第一次設定的一致,因為我們每次啟動的chrome瀏覽器的用戶數據都不再為空。

?通過CMD命令(加--user-data-dir)啟動的chrome瀏覽器

?代碼設定

????????我們使用CMD命令啟動了指定端口的瀏覽器后,接下來要做的就是在代碼中設定并與其連接,

連接之后,其余操作與我們正常使用webdriver一致。

代碼

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
port=9222
chrome_options=Options()
chrome_options.add_experimental_option('debuggerAddress',f'127.0.0.1:{port}')
browser=webdriver.Chrome(options=chrome_options)
browser.get('url')
#
#
#其余操作邏輯

?Chrome瀏覽器連接已在9222端口打開的瀏覽器

from selenium import webdriver
from selenium.webdriver.edge.options import Options
port=9222
chrome_options=Options()
chrome_options.add_experimental_option('debuggerAddress',f'127.0.0.1:{port}')
browser=webdriver.Edge(options=chrome_options)
browser.get('url')
#
#
#其余操作邏輯

??Edge瀏覽器連接已在9222端口打開的瀏覽器

????????上述代碼運行后便會連接到指定端口打開過的對應的瀏覽器,但是考慮到需要手動打開CMD輸入命令比較麻煩,我們可以使用OS庫在代碼中直接執行前邊提到的CMD命令。

????????于是便有了下邊的改進后的代碼。

改進代碼

#打開已經打開過的谷歌瀏覽器
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.chrome.options import Optionsimport os
def open_chrome(port:int=9222,user_data_dir:str=None):cmd_line=f'start chrome --remote-debugging-port={port}'if user_data_dir:cmd_line+=f' --user-data-dir={user_data_dir}'os.popen(cmd_line)port=9222
user_data_dir=None
open_chrome(port=port,user_data_dir=user_data_dir)
chrome_options=Options()
chrome_options.add_experimental_option('debuggerAddress',f'127.0.0.1:{port}')
browser=webdriver.Chrome(options=chrome_options)
browser.get('url')
#
#
#

打開指定端口打開過的Chrome瀏覽器

#打開指定端口打開過的Edge瀏覽器
from selenium import webdriver
from selenium.webdriver.edge.options import Optionsimport os
def open_edge(port:int=9222,user_data_dir:str=None):cmd_line=f'start msedge --remote-debugging-port={port}'if user_data_dir:cmd_line+=f' --user-data-dir={user_data_dir}'os.popen(cmd_line)port=9222
user_data_dir=r"E:\OneDrive\Desktop\Edgedata"
open_edge(port=port,user_data_dir=user_data_dir)
edge_options=Options()
edge_options.add_experimental_option('debuggerAddress',f'127.0.0.1:{port}')
browser=webdriver.Edge(options=edge_options)
browser.get('url')
#
#
#

?打開指定端口打開過的Edge瀏覽器

效果

????????這里我們以打開小紅書并在搜索框內搜索指定內容為例。

直接使用webdriver

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium .webdriver.chrome.options import Options
from selenium import webdriver
chrome_options=Options()
chrome_options.add_experimental_option('detach',True)#確保webdriver不會任務完成關閉
browser=webdriver.Chrome(options=chrome_options)
browser.get('https://www.xiaohongshu.com/explore')
browser.maximize_window()
browser.implicitly_wait(10)
search_bar=browser.find_element(By.XPATH,'//*[@id="search-input"]')
browser.execute_script('arguments[0].click()',search_bar)
search_bar.send_keys('哪吒2之魔童鬧海')
search_bar.send_keys(Keys.ENTER)

?結果

????????直接使用webdriver打開有彈窗,且還需要傳入很多options參數來免除自動化痕跡,面對這種情況我們通常是在代碼內加一個手動掃碼登錄的機制,但是這樣比較麻煩,尤其是代碼需要反復調試時,每次運行代碼都需要手動掃碼進行登錄,次數太多還有可能被封IP。?

使用指定端口打開的瀏覽器

????????為了更方便,我們在CMD命令中不使用--user-data-dir參數,這樣打開的瀏覽器的userdata包括各個網站的cookie數據都與先前的瀏覽器一致,唯一區別就是端口號不一致。

????????首先,雙擊打開桌面的Chrome瀏覽器,并掃碼登錄小紅書。

已經登錄了的小紅書?

????????接著,關掉打開的Chrome瀏覽器,直接運行下方代碼?

#打開指定端口打開過的Chrome瀏覽器
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium import webdriverimport os
def open_chrome(port:int=9222,user_data_dir:str=None):cmd_line=f'start chrome --remote-debugging-port={port}'if user_data_dir:cmd_line+=f' --user-data-dir={user_data_dir}'os.popen(cmd_line)port=9222
user_data_dir=None
open_chrome(port=port,user_data_dir=user_data_dir)
chrome_options=Options()
chrome_options.add_experimental_option('debuggerAddress',f'127.0.0.1:{port}')
browser=webdriver.Chrome(options=chrome_options)
browser.get('https://www.xiaohongshu.com/explore')
browser.maximize_window()
browser.implicitly_wait(10)
search_bar=browser.find_element(By.XPATH,'//*[@id="search-input"]')
browser.execute_script('arguments[0].click()',search_bar)
search_bar.send_keys('哪吒2之魔童鬧海')
search_bar.send_keys(Keys.ENTER)

??運行結果

???????可以看到,我們在options選項中并沒有指定任何消除自動化控制痕跡的argument然而左上角卻沒有受到自動測試軟件控制字樣的infobar,并且一打開網頁便是登錄狀態,這說明我們啟動的不是webdriver而是已經連接到的Chrome瀏覽器。

說明

? ? ? ?1. Edge瀏覽器的連接方法與上文案例中所示的Chrome瀏覽器連接方法一致,只不過,作者本人電腦上在測試時總是需要在CMD命令中指定--user-data-dir參數才可以正常運行,即使這樣也沒關系,你可以先運行open_edge()函數,然后打開新的edge后點擊一鍵導入數據然后之后正常使用即可。

import os
def open_edge(port:int=9222,user_data_dir:str=None):cmd_line=f'start msedge --remote-debugging-port={port}'if user_data_dir:cmd_line+=f' --user-data-dir={user_data_dir}'os.popen(cmd_line)port=9222
user_data_dir=r"E:\OneDrive\Desktop\Edgedata"
open_edge(port=port,user_data_dir=user_data_dir)

打開指定端口的edge瀏覽器?

????????點擊是,繼續后就會將原來edge的userdata全部導入的你傳入的文件夾內,之后你每次帶著--user-data-dir=‘文件夾路徑’ 這一參數運行即可。?

????????2.連接到已經打開過的瀏覽器進行自動化的話,除了用來設置連接端口的options,其余options都將失效,即使傳入也不會有任何變化,因為那些options都是給webdriver設置的,我們現在正在操控的是瀏覽器實例!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70628.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70628.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70628.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Alertmanager】Alertmanager告警路由,告警靜默,告警抑制,高可用的實現

?? 歡迎大家來到景天科技苑?? ???? 養成好習慣,先贊后看哦~???? ?? 作者簡介:景天科技苑 ??《頭銜》:大廠架構師,華為云開發者社區專家博主,阿里云開發者社區專家博主,CSDN全棧領域優質創作者,掘金優秀博主,51CTO博客專家等。 ??《博客》:Python全…

Vue3 + Vite + TS,使用 配置項目別名屬性:resolve

使用 resolve 配置全局項目路徑別名 1.優化了開發中單頁面引用其他模塊的路徑復雜性 2.妥妥解決了,組件復用當中提高開發效率 // 不使用配置 import { useStore } from ../../../stores // 使用配置 可根據開發者需求任意定義,較多 import { useStore…

Linux主機用戶登陸安全配置

Linux主機用戶登陸安全配置 在Linux主機上進行用戶登錄安全配置是一個重要的安全措施,可以防止未經授權的訪問。以下是如何創建用戶hbu、賦予其sudo權限,以及禁止root用戶SSH登錄,以及通過ssh key管理主機用戶登陸。 創建用戶hbu 使用具有…

基于 SpringBoot Vue 的生鮮商城系統設計和實現(源碼+文檔+部署講解)

技術范圍:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論…

設計模式-結構性模式

結構型模式主要關注類或對象的組合,旨在通過識別簡單的結構關系來設計更復雜的結構。以下是幾種常見的結構型設計模式: 1. 適配器模式(Adapter Pattern) 將一個類的接口轉換成客戶端所期望的另一個接口,使得原本由于接…

VantUI官網更新2025,移動端前端開發

Vant 2 - Mobile UI Components built on Vue https://vant-ui.github.io/vant/v2/#/zh-CN/quickstart Vant 4 - A lightweight, customizable Vue UI library for mobile web apps. https://vant-ui.github.io/vant/#/zh-CN Vant Weapp - 輕量、可靠的小程序 UI 組件庫,微…

《我的AUTOSAR之路》Det 解析

Det 解析 1. 引言和功能概述2. Errors2.1 開發錯誤(Development Errors)2.2 運行時錯誤(Runtime Errors)2.3 臨時故障(Transient Faults)3 錯誤查詢默認錯誤追蹤器(Default Error Tracer,DET) 1. 引言和功能概述 默認錯誤追蹤器(DET):該規范描述了默認錯誤追蹤器(…

電腦連接示波器顯示波形

通過網線連接示波器和電腦,將示波器波形顯示在電腦上直接復制圖片至報告中,以下是配置步驟。 一、設備 網線,Tektronix示波器,電腦 二、使用步驟 1.用網線連接電腦和示波器 2.電腦關掉WiFi,查看IPv4網關地址&#xf…

npm i 失敗權限問題

安裝完node之后, 測試全局安裝一個最常用的 express 模塊進行測試 失敗,但是用管理員權限打開cmd 安裝就成功。 報錯如下: npm ERR! If you believe this might be a permissions issue, please double-check the npm ERR! permissions of the file and …

上海創智學院(測試)算法筆試(ACM賽制)部分例題

1.第一個題,大概題目意思是求n句話中最長的單詞和最短的單詞 這個題目做的有點磕巴,好幾年沒有寫過c/c了,連string的復制都不會寫了,哈哈哈,太笨了 后面一點點撿起來,還是寫出來了,本身沒啥&…

編寫一個程序,輸出 “Hello, World!“(Python版)

編寫一個程序,輸出 "Hello, World!" 在 Python 中,輸出 “Hello, World!” 的程序非常簡單。你只需要使用 print 函數即可。以下是代碼示例: print("Hello, World!")將這段代碼保存為一個 .py 文件(例如 hel…

python實戰項目58:采集蜻蜓FM熱門音頻top排行榜

python實戰項目58:采集蜻蜓FM熱門音頻top排行榜 一、采集流程介紹二、數據接口采集三、使用xpath提取頁面數據1、抓包,找到數據接口2、發送請求,獲取數據3、提取數據4、保存數據一、采集流程介紹 蜻蜓FM熱門音頻top排行榜的鏈接為: https://m.qingting.fm/rank/,首頁如下圖…

【Matlab仿真】Matlab Function中如何使用靜態變量?

背景 根據Simulink的運行機制,每個采樣點會調用一次MATLAB Function的函數,兩次調用之間,同一個變量的前次計算的終值如何傳遞到當前計算周期來?其實可以使用persistent變量實現函數退出和進入時內部變量值的保持。 persistent變…

LaneATT環境配置步驟

本文介紹Ubuntu下配置車道線檢測算法LaneATT代碼運行環境,步驟如下。 1. 從LaneATT官方代碼倉庫下載源碼。也可git直接拉取。 2. 安裝Anaconda或miniconda 。 參考:https://docs.anaconda.com/miniconda/ 3. 創建conda虛擬環境LaneATT(環…

【AIGC】使用Python實現科大訊飛語音服務ASR轉錄功能:完整指南

文章目錄 訊飛ASR轉寫API完整指南1. 引言2. 訊飛ASR API介紹3. API參數說明3.1 認證參數3.2 上傳參數3.3 查詢結果參數3.4 orderResult 字段3.5 Lattice 字段3.6 json_1best 字段3.7 st 字段 4. Python代碼實現4.1 生成簽名4.2 上傳音頻文件4.3 獲取轉寫結果4.4 解析轉寫結果 5…

大學本科教務系統設計方案,涵蓋需求分析、架構設計、核心模塊和技術實現要點

以下是大學本科教務系統的設計方案,涵蓋需求分析、架構設計、核心模塊和技術實現要點: 大學本科教務系統設計方案 一、需求分析 1. 核心用戶角色 角色功能需求學生選課/退課、成績查詢、課表查看、學分統計、考試報名、學業預警教師成績錄入、課程大綱上傳、教學進度管理、…

30道Qt面試題(答案公布)

前五個答案 ? 1. Qt中常用的五大模塊是哪些? Qt中常用的五大模塊包括: ? Qt Core:提供核心非GUI功能,如數據結構、文件操作、國際化等。 ? Qt GUI:提供與平臺無關的圖形和基本窗口功能。 ? Qt Widgets:提供用于創建傳統桌面應用程序的UI組件。 ? Qt Netw…

jdk21下載、安裝(Windows、Linux、macOS)

Windows 系統 1. 下載安裝 訪問 Oracle 官方 JDK 下載頁面 或 OpenJDK 下載頁面,根據自己的系統選擇合適的 Windows 版本進行下載(通常選擇 .msi 安裝包)。 2. 配置環境變量 右鍵點擊 “此電腦”,選擇 “屬性”。 在左側導航欄…

2022年全國職業院校技能大賽網絡系統管理賽項模塊A:網絡構建(樣題6)-網絡部分解析-附詳細代碼

目錄 附錄1:拓撲圖 附錄2:地址規劃表 1.SW1 2.SW2 3.SW3 4.SW4 5.VSU 6.SW7 7.R1 8.R2 9.R3 10.AC1 11.AC2 12.EG1 13.EG2 附錄1:拓撲圖 附錄2:地址規劃表

java項目之網絡游戲交易系統源碼(ssm+mysql)

風定落花生,歌聲逐流水,大家好我是風歌,混跡在java圈的辛苦碼農。今天要和大家聊的是一款基于ssm的網絡游戲交易系統。項目源碼以及部署相關請聯系風歌,文末附上聯系信息 。 項目簡介: 本網絡游戲交易系統分為管理員…