一日一技:Selenium如何接管已經(jīng)運(yùn)行的 Chrome 瀏覽器?
在昨天的文章一日一技:爬蟲(chóng)模擬瀏覽器如何避免重復(fù)登錄?中,我講到了如何使用Puppeteer接管已經(jīng)運(yùn)行的Chrome。今天我們來(lái)講講使用Selenium如何實(shí)現(xiàn)這個(gè)功能。
在正式開(kāi)始之前,先糾正昨天的一個(gè)錯(cuò)誤。昨天我講到,Windows電腦啟動(dòng)Chrome的遠(yuǎn)程調(diào)試模式用到的命令是:
- 文件路徑/chrome.exe --remote-debugging-port=9222
這個(gè)地方漏掉了一個(gè)參數(shù)。正確的命令應(yīng)該是:
- 文件路徑/chrome.exe --remote-debugging-port=9222 --user-data-dir="某個(gè)存在的文件夾地址"
好了,回到正題。現(xiàn)在無(wú)論你使用macOS還是Windows,首先按昨天的文章所說(shuō),啟動(dòng)Chrome開(kāi)放9222端口。然后,在這個(gè)Chrome中,手動(dòng)登錄示例網(wǎng)站。
接下來(lái),編寫(xiě)下面這段代碼:
- from selenium.webdriver import Chrome
- from selenium.webdriver.chrome.options import Options
- chrome_options = Options()
- chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
- # 注意我把chromedriver文件放到了當(dāng)前文件夾里面,所以可以這樣調(diào)用
- # 如果你是windows電腦,你需要使用./chromedriver.exe
- driver = Chrome('./chromedriver', options=chrome_options)
- driver.get('http://exercise.kingname.info/exercise_login_success')
- input('輸入任意內(nèi)容繼續(xù)')
- driver.get('https://www.kingname.info')
- input('輸入任意內(nèi)容繼續(xù)')
- driver.get('http://exercise.kingname.info/exercise_login_success')
如下圖所示:
由于使用Selenium的時(shí)候,始終操作的都是當(dāng)前標(biāo)簽頁(yè),為了證明確實(shí)有效,所以我在示例代碼里面,先把爬蟲(chóng)暫停,需要你在終端按下任何鍵以后,再打開(kāi)我的博客。接下來(lái),等你確認(rèn)博客已經(jīng)打開(kāi)以后,再回到終端按下任意鍵,Chrome會(huì)再次打開(kāi)登錄成功的頁(yè)面。
你還可以試一試把Python程序終止,再重新運(yùn)行。你會(huì)發(fā)現(xiàn)代碼依然可以接管這個(gè)瀏覽器窗口。