一、基础介绍
基础介绍可以参考优快云的其他文章,之前学习的链接我挂一个,很详细,强推selenium用法详解【从入门到实战】【Python爬虫】【4万字】_Dream丶Killer的博客-优快云博客
二、驱动安装
1.开始的时候未发现webdriver_manager这个库,使用的是最笨的方案,调用时进行联网下载
https://chromedriver.storage.googleapis.com/index.html
进行下载
(1)使用request进行url的打开然后使用tqdm库进行进度条打印,最后使用get进行获取,下载代码如下,也是参考了一位博主,不过具体忘记是哪个博主
def downloadFromUrl(url, local):
"""
主要进行文件的下载
:param url: 下载的url地址
:param local: 本地存放路径
:return status,message [str] [str]: 错误码,测试结果信息
"""
# # 获取文件长度
try:
file_size = int(urlopen(url).info().get('Content-Length', -1))
except Exception:
return u'0x3101', "错误,访问url: %s 异常" % url
# 文件大小
first_byte = os.path.getsize(local) if os.path.exists(local) else 0
if first_byte >= file_size:
return u'0x3102', "获取文件大小异常"
header = {"Range": "bytes=%s-%s" % (first_byte, file_size)}
pbar = tqdm(total=file_size, initial=first_byte, unit='B', unit_scale=True, desc=url.split('/')[-1])
# 访问url进行下载
req = requests.get(url, headers=header, stream=True)
try:
with(open(local, 'ab')) as f:
for size in req.iter_content(chunk_size=1024):
if size:
f.write(size)
pbar.update(1024)
except Exception as e:
print(e)
return u'0x3103', "访问{}进行文件下载出现异常".format(url)
pbar.close()
return u'0x0000', 'OK'
(2)然后使用zip库对下载文件解压
def unzipFile(src_file, dest_dir, *password):
"""
主要进行下载文件的解压操作
:param src_file: 对应的文件的绝对路径
:param dest_dir: 解压后存放路径
:param password: 如果有密码则输入
:return status,message [str] [str]: 错误码,测试结果信息
"""
if password:
password = password.encode()
zf = zipfile.ZipFile(src_file)
try:
zf.extractall(path=dest_dir, pwd=password)
except RuntimeError:
return u'0x3104', '进行文件解压异常,请确认文件{}是否存在'.format(src_file)
zf.close()
return u'0x0000', 'OK'
2.后来发现了webdriver_manager这个官方推荐的库,可以用于驱动管理,从而减少了获取解压等一系列代码
(1)安装webdriver_manager
pip install webdriver_manager
(2)调用webdriver_manager,主要分为chrome、firefox、microsoft,由于刚接触这个库,就先拿edge举例子
其中microsoft.EdgeChromiumDriverManager().install()进行驱动的下载
webdriver为selenium,将driver的路径传入后直接可以调用
web_driver =webdriver.Edge(executable_path=microsoft.EdgeChromiumDriverManager().install())
web_driver.maximize_window()
执行结果如下
三、浏览器设置的选项
日常使用中由于chrome使用范围最广,所以网上对于chrome设置最全,目前我使用过的选项也仅有其中一部分
options = webdriver.ChromeOptions()
# web_detach为True时防止关闭
options.add_experimental_option("detach", True)
# 用于防止日志在终端刷屏
options.add_experimental_option("excludeSwitches", ["enable-logging", 'enable-automation'])
# download.default_directory 用于指定下载路径
# safebrowsing.enabled 用于跳过谷歌的下载校验,及手动选择保留或者删除
# profile.managed_default_content_settings.image 图片加载
# permissions.default.stylesheet CSS加载
prefs = {"profile.default_content_settings.popups": 0, "download.default_directory": out_path,"safebrowsing.enabled": True, "permissions.default.stylesheet": 1}
options.add_experimental_option("prefs", prefs)
firefox以及edge目前未使用
from selenium.webdriver.edge.options import Options as EdgeOptions
# edge浏览器设置
from selenium.webdriver import FirefoxOptions
# firefox浏览器设置
edge可以使用之前的库进行选项的获取,msedge库
安装:
pip install msedge-selenium-tools
调用
from msedge.selenium_tools import EdgeOptions
options = EdgeOptions()
options.set_capability("excludeSwitches", ["enable-logging", 'enable-automation'])
webdriver.Edge(executable_path=microsoft.EdgeChromiumDriverManager().install(), capabilities=options)
四、关于浏览器隐私设置
在使用浏览器登录某些页面时会出现隐私问题,如下图
这时就需要对应的处理,可以直接调用selenium输入 thisisunsafe 即可
web_driver.find_elements(By.XPATH, './html').send_keys('thisisunsafe')
也可以通过一个options选项规避
options.add_argument('--ignore-certificate-errors')
edge浏览器无法使用该options选项规避,如果有大佬有方法麻烦提点一下hhh