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/Google Chrome.app/Contents/MacOS/Google Chrome"  --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 Chrome
from selenium.webdriver.chrome.service import Service
from 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('https://blog.csdn.net/HRG520JN/article/details/125936986')
http_str = input('输入任意地址,无则回车')
if http_str:http_str = http_str
else:http_str = 'https://blog.csdn.net/HRG520JN/article/details/125781184'
driver.get(http_str)http_str2 = input('输入任意内容地址,无则回车查看selenium全面讲解文章')
if http_str2:http_str2 = http_str2
else:http_str2 = 'https://blog.csdn.net/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 sys
import configparser
from selenium import webdriver
from selenium.webdriver.chrome.service import Servicesys.path.append("..")
# 这里是自己下载的ie驱动
iedriver = Service('D:\software\PyCharmLib\IEDriverServer.exe')
driver = webdriver.Ie(service=iedriver)
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()

运行后,会在同目录下生成一个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 sys
import configparser
from 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("https://www.csdn.net")

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

3 写在最后

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

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

Selenium控制已打开的chrome、IE浏览器相关推荐

  1. Selenium控制已打开的Chrome浏览器

    文章目录 1.方法一 1.1.设置Chrome属性 1.2.编写代码 2.方法二 1.方法一 1.1.设置Chrome属性 Chromen属性,快捷方式标签下,目标后面加上参数 --remote-de ...

  2. 使用Selenium控制已打开的浏览器和网页

    使用Selenium控制已打开的浏览器和网页 之前遇到一个需求,就是需要登录某一个网站然后需要通过selenium从网页上自动获取一些信息:该网站需要通过手机验证码登录,通过selenium自动化登录 ...

  3. selenium 自动打开Chrome浏览器且重复使用已打开的Chrome实例

    好处还能有啥?就是偷懒呗,打开脚本就跑,还管浏览器干啥. 如何使用已打开Chrome,其他文章讲很多了,也不多说,这里主要参考的这片文章 selenium 使用已打开的chrome浏览器_YeLang ...

  4. selenium:使用已打开的chrome浏览器

    前言 环境参考 selenium:我的第一个程序 使用已打开的chrome浏览器有啥好处 不用验证登陆状态,可以先登陆,再爬虫 不用反复开浏览器 开启命令行启动 chrome.exe 找到 chrom ...

  5. selenium如何控制已打开浏览器

    在使用selenium进行Web自动化的时候,部分网站会有验证码.缓存等等原因,需在登录后再进行后续自动化.此时,就需控制在已打开的浏览器,在此,以 Chrome为例进行分析. 1.确定当前浏览器驱动 ...

  6. 如何利用 Selenium 对已打开的浏览器进行爬虫!

    大家好,我是安果! 在对某些网站进行爬虫时,如果该网站做了限制,必须完成登录才能展示数据,而且只能通过短信验证码才能登录 这时候,我们可以通过一个已经开启的浏览器完成登录,然后利用程序继续操作这个浏览 ...

  7. 如何利用 Selenium 对已打开的浏览器进行爬虫

    大家好! 在对某些网站进行爬虫时,如果该网站做了限制,必须完成登录才能展示数据,而且只能通过短信验证码才能登录 这时候,我们可以通过一个已经开启的浏览器完成登录,然后利用程序继续操作这个浏览器,即可以 ...

  8. Mac 解决selenium调试每次打开新Chrome浏览器问题

    文章目录 配置chrome 连接浏览器 配置chrome open -e ~/.zshrc 在结尾添加: export PATH="/Applications/Google Chrome.a ...

  9. selenium连接已打开的Firefox浏览器

    原理:将session_id和url进行记录,下次打开firefox浏览器进行复用 import os,pickle,json,win32api from selenium import webdri ...

  10. mac selenium 连接已经打开的chrome浏览器

    今天在mac环境下尝试了一下用selenium连接现有的服务器,本来想绕过某宝的反爬虫机制的,但是并没有什么用,但是这个技术不错,我这里分享一下实现过程. 添加环境变量 export PATH=&qu ...

最新文章

  1. 小米正用时序数据库,解决这个“硬核”问题
  2. 学python还是go会php_现在想再学习一门编程语言,应该选择go还是python?
  3. 数据结构--树形结构
  4. vue的computed计算属性学习
  5. OpenCv学习笔记(二)—cv Mat学习
  6. 拼多多与两大权威球鞋鉴别平台达成合作,为“多多潮鞋馆”提供“真香”认证...
  7. sqlite如何与mysql连接数据库连接_c#中怎么连接到sqlite数据库?
  8. 2015年传智播客java_2015年最佳Java教程
  9. 中国雅虎首页改版彻底与口碑网剥离
  10. dw中html网页如何加音乐播放器,在dreamweaver网页制作中插入音乐播放器详细参考...
  11. 计算机技术与软件专业技术资格 (水平) 考试 - 报考指南
  12. 周其仁:到以色列游学,让我深受刺激!
  13. # 天下武功无坚不破,唯快不破!
  14. 如何在安卓手机上编辑Excel表格?
  15. PTA 选择结构 7-1 能买手机吗?
  16. 深度学习: ground truth 解释
  17. RK3568烧录系统
  18. [问题记录]Chrome浏览器无法保存或自动填充密码
  19. sympy 符号函数求导
  20. 成功解决最新版腾讯QQ软件出现的二维码加载失败,请点击刷新(一步搞定!)

热门文章

  1. 淘宝上大量贩卖微信号,这些人买这么多微信号目的是
  2. 如何在一台手机上,同时登录两个微信号?
  3. 墨尔本大学计算机科学要求,墨尔本大学计算机科学
  4. 秦九韶多项式运算时间java_多项式计算之秦九韶算法
  5. uc手机浏览器 手机模拟_移动端页面调试工具——UC浏览器开发者版
  6. python输出斐波那契数列_Python实现斐波那契数列
  7. centos7上装qt5.15.2
  8. matlab fft能量守恒吗,功能关系 能量守恒定律
  9. 周杰伦专辑《最伟大的作品》在哪看?当贝盒子畅享周董最新MV
  10. HCIA-IoT 个人学习总结 Day4