控制已打开IE浏览器窗口的方法很难找,这里给出一个方案。
1、重写Remote
ReuseIe.py
from selenium.webdriver import Remote
from selenium.webdriver.ie import options
from selenium.common.exceptions import InvalidArgumentException
class ReuseIe(Remote):
def __init__(self,command_executor,session_id):
self.r_session_id=session_id
Remote.__init__(self, command_executor=command_executor,desired_capabilities={
})
def start_session(self, desired_capabilities, browser_profile=None):
capabilities = {
'desiredCapabilities':{
}, 'requiredCapabilities':{
}}
for k, v in desired_capabilities.items():
if k not in ('desiredCapabilities', 'requiredCapabilities'):
capabilities['desiredCapabilities'][k] = v
else:
capabilities[k].update(v)
if browser_profile:
capabilities['desiredCapabilities']['firefox_profile'] = browser_profile.encoded
self.session_id =self.r_session_id
self.capabilities = options.Options().to_capabilities()
self.w3c = False
2、创建Session
先运行此程序打开IE浏览器,保存浏览器的Session等相关信息。
CreateSession.py
from selenium import webdriver
import sys
sys.path.append("..")
from ReuseIe import *
import configparser
driver=webdriver.Ie()
url=driver.command_executor._url
session_id=driver.session_id
print(driver.session_id)
print(driver.command_executor._url)
config=configparser.ConfigParser()
config.add_section("IE")
config.set("IE","url",url)
config.set("IE","session_id",session_id)
with open("session.ini","w+") as f:
config.write(f)
f.close()
3、控制已打开的IE浏览器窗口
根据第2步保存的Session,接管已打开的IE浏览器。
from selenium import webdriver
import sys
sys.path.append("..")
from ReuseIe import *
import configparser
config=configparser.ConfigParser()
config.read("session.ini",encoding="utf-8")
url=config.get("IE","url")
session_id=config.get("IE","session_id")
print(session_id)
print(url)
driver=ReuseIe(url,session_id)
driver.get("https://www.baidu.com")