python-selenium4使用-安装与浏览器配置

环境

Python 3.9.13

浏览器 chrome

selenium 4.4.3

问题

在一个自动化脚本的运行下,环境是非常重要的,因此我们在不同电脑运行脚本时,就会遇到驱动不一致导致脚本无法运行的问题,不同浏览器驱动可能都不同,因此为了统一当前驱动,我们可以使用python的一个库来进行处理,这个库能帮我们安装指定的浏览器驱动Webdriver Manager,我们可以在其中看到使用案例,本次我使用的selenium版本是4

如何使用

安装Webdriver Manager

pip install webdriver-manager

不同浏览器的使用代码

这里只展示了selenium 4 的常用浏览器代码,需要其他浏览器和版本的代码请参考网站Webdriver Manager,在此不记录

Chrome
# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
Firefox
# selenium 4
from selenium import webdriver
from selenium.webdriver.firefox.service import Service as FirefoxService
from webdriver_manager.firefox import GeckoDriverManager

driver = webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()))
IE
# selenium 4
from selenium import webdriver
from selenium.webdriver.ie.service import Service as IEService
from webdriver_manager.microsoft import IEDriverManager

driver = webdriver.Ie(service=IEService(IEDriverManager().install()))
Edge
# selenium 4
from selenium import webdriver
from selenium.webdriver.edge.service import Service as EdgeService
from webdriver_manager.microsoft import EdgeChromiumDriverManager

driver = webdriver.Edge(service=EdgeService(EdgeChromiumDriverManager().install()))
Opera
# selenium 3 & 4
from selenium import webdriver
from webdriver_manager.opera import OperaDriverManager

driver = webdriver.Opera(executable_path=OperaDriverManager().install())
Chromium
# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromiumService
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core.utils import ChromeType

driver = webdriver.Chrome(service=ChromiumService(ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install()))
Brave
# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as BraveService
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core.utils import ChromeType

driver = webdriver.Chrome(service=BraveService(ChromeDriverManager(chrome_type=ChromeType.BRAVE).install()))

从路径获取浏览器版本

在之前的代码中,我们更新最新的驱动的同时,浏览器可能不支持最新的驱动,因此我们也可以自己指定当前浏览器的版本去自动下载对应版本的驱动

from webdriver_manager.core.utils import read_version_from_cmd, PATTERN
version = read_version_from_cmd("/usr/bin/firefox-bin --version", PATTERN["firefox"])
driver_binary = FirefoxDriverManager(version=version).install()

自动化打开百度

这串代码很简单,只是用来打开百度贴吧网站的,那么我们可以看到浏览器上显示着"Chrome正受到自动测试软件的控制",因为selenium是以最纯净的普通浏览器打开测试

image-20221230162534522

# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager


def demo_test():
    driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
    driver.get("https://tieba.baidu.com/index.html")


if __name__ == '__main__':
    demo_test()

浏览器自定义配置拓展

按照上述默认是满足了一般的需求,但是这样会少你需要的数据,或者是有些网站有对selenium进行特殊照顾打不开,因此我们需要对浏览器进行配置,这样可以打开浏览器的时候是可以按照自己拓展的来,我们对浏览器的配置文件的编写可以参照其他人的文章:Selenium之Chrome选项和DesiredcapabilitiesChrome选项

Selenium使用ChromeOptions启动参数,在我们使用Linux系统的时候就需要用到禁止GPU加速,因为我们很多服务器Linux系统都只是使用CPU没有直通GPU,因此可以禁止,在此处我演示下窗口禁止图片加载启动参数配置

首先我们需要先获取到浏览器的信息,在使用add_argument()去拓展自己需要的启动参数,我们可以对ChromeOptions的获取方式进行处理

# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager


def demo_test():
    options = webdriver.ChromeOptions()
    # 禁止图片加载
    options.add_argument('blink-settings=imagesEnabled=false')
    # 无界面模式headless 当其是True的时候就是后台运行模式,默认是False
    # options.headless = True
    driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), chrome_options=options)
    driver.get("https://tieba.baidu.com/index.html")


if __name__ == '__main__':
    demo_test()

在添加了禁止图片加载的启动项后,我们可以看到贴吧的图片都消失了,这样不仅节省了流量,更加快了接口的调用,在我们编写脚本成熟后一般选择不需要打开界面运行,放在后台自己跑即可,那么我们可以在浏览器参数上添加上无界面模式headless

image-20221230162903098

posted @ 2022-12-30 17:03  HeiDaotu  阅读(839)  评论(0编辑  收藏  举报