900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Selenium控制已打开的chrome IE浏览器

Selenium控制已打开的chrome IE浏览器

时间:2024-02-18 19:31:29

相关推荐

Selenium控制已打开的chrome IE浏览器

0 为什么要接管打开的浏览器

1、重复重新登录,过程麻烦

2、拖慢爬虫的运行速度

3、容易让网站检测到账号异常

如何解决重复登录的问题

1、使用登录过的cookie,下次运行时设置保存

2、接管打开的浏览器,也是我们接下来重点讲的

1 控制已打开的chrome浏览器

1.1 接管的原理

Chrome浏览器是支持远程调试模式的。这个模式打开的情况下,Puppeteer或者Selenium可以通过websocket连上去,进而控制它。

下面氛围启动浏览器和启动爬虫接管两部分

1.2 启动浏览器

启动Chrome的远程调试端口

第一步:你需要找到Chrome的安装位置,在Chrome的地址栏输入chrome://version就能找到Chrome的安装路径,如下图所示:

找到路径后,先创建一个空白的文件夹,后面需要存放打开远程浏览器的内容。

第二步:执行命令启动支持远程调试功能的Chrome【启动后不要关闭!】

以windows系统为例:键盘同时按下:windows旗帜键+R,调出运行,然后输入:cmd,回车调出命令提示框,然后之下面命令。

windows系统命令:

文件路径/chrome.exe --remote-debugging-port=9222 --user-data-dir="某个空白文件夹地址"

参数说明:

--remote-debugging-port:可以指定任意可使用的端口

--user-data-dir:指定创建新的chrome配置目录,作用是防止污染默认配置

注意:如果路径中含有空格,在下面命令使用的时候会有问题,因为命令是不能有空格

【解决方法:】在文件中直接打开该路径,然后在路径输入栏里面输入:cmd,然后回车,就能调出该目录下的命令提示框。同时命令也被简化成:chrome.exe --remote-debugging-port=9222 --user-data-dir="某个空白文件夹地址"

mac系统命令:

"/Applications/GoogleChrome.app/Contents/MacOS/GoogleChrome"--remote-debugging-port=9222--no-first-run--no-default-browser-check--user-data-dir=$(mktemp-d-t'chrome-remote_data_dir')

注意:由于地址中有空格,所以要把可执行文件的路径用引号抱起来。

第三步:手动新开一个浏览器,并访问下面地址

http://127.0.0.1:9222/json/version

访问地址后,我们可以看到一段json信息,记住最下方的webSocketDebuggerUrl,这个就是我们后面需要远程访问的链接。

ws://127.0.0.1:9222/devtools/browser/d1f5ebaf-ae68-4057-91db-cd8e2df81f68(以实际为准)。

1.3 爬虫接管

通过上面的步骤,我们成功启动Chrome并开放9222端口,下面我们通过代码来实现控制刚才已打开的chrome浏览器访问我们的目标网址。

from selenium.webdriver import Chromefrom selenium.webdriver.chrome.service import Servicefrom selenium.webdriver.chrome.options import Optionschrome_options = Options()chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")driver = Chrome(service=Service(r'D:\software\PyCharmLib\chromedriver.exe'),options=chrome_options)# 注意:把chromedriver文件放到了当前文件夹里面,可以这样调用# driver = Chrome('./chromedriver.exe', options=chrome_options)driver.get('/HRG520JN/article/details/125936986')http_str = input('输入任意地址,无则回车')if http_str:http_str = http_strelse:http_str = '/HRG520JN/article/details/125781184'driver.get(http_str)http_str2 = input('输入任意内容地址,无则回车查看selenium全面讲解文章')if http_str2:http_str2 = http_str2else:http_str2 = '/HRG520JN/article/details/125781184'driver.get(http_str2)

为了证明确实有效控制,我在上面代码加入了本人的博客文章地址,如果有内容输入则访问,无则访问selenium文章讲解。

2 控制已打开的IE浏览器

因为很多政务系统都是需要ie或者edge浏览器操作,前期需要人工手动打开各种安全控制软件,如果通过自动化主动打开浏览器是无法打开那些系统的,所以前期就需要先人工操作再由selenium接管IE浏览器来实现。

2.1 创建session

通过第一次打开ie浏览器,然后将其session_id和地址保存在本地session.ini文件中。

CreateSession.py

import sysimport configparserfrom selenium import webdriverfrom selenium.webdriver.chrome.service import Servicesys.path.append("..")# 这里是自己下载的ie驱动iedriver = Service('D:\software\PyCharmLib\IEDriverServer.exe')driver = webdriver.Ie(service=iedriver)url = mand_executor._urlsession_id=driver.session_idprint(driver.session_id)print(mand_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()

运行后,会在同目录下生成一个session.ini文件,里面内容如下:

2.2 重写remote

ReuseIe.py,这里不用运行,将由下面接管的时候引用处理

from selenium.webdriver import Remoteclass ReuseIe(Remote):def __init__(self, command_executor, session_id):self.r_session_id = session_idRemote.__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] = velse:capabilities[k].update(v)if browser_profile:capabilities['desiredCapabilities']['firefox_profile'] = browser_profile.encodedself.session_id = self.r_session_id# self.capabilities = options.Options().to_capabilities()self.w3c = False

2.3 接管打开的IE浏览器

useie.py

import sysimport configparserfrom ReuseIe import *sys.path.append("..")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("")

运行useie.py后我们会发现,没有新增ie浏览器,使用的就是刚才我们打开的浏览器,在实际应用中,根据业务再自行封装起来使用,思路是提供一个运行文件让操作员点击,先启动ie浏览器,然后再启动咱们的核心程序就可以了。

3 写在最后

如果对selenium chrome、ie浏览器驱动不懂的,可以看下这篇文章的第2点 安装浏览器驱动或者学习下有关于selenium基础

学习过程中有什么问题,欢迎下方评论交流。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。