Selenium 操作文档

📖 Python 下的 Selenium 操作汇总

0%

简单介绍

基于浏览器驱动的自动化操作浏览器工具, 用于运维测试也可用于爬虫。

操作流程
selenium -> 传输指令 —> webdriver -> 转换指令 -> 浏览器执行

安装使用

  • 安装Python版本的selenium

    pip install selenium
  • 查看Chrome版本,浏览器输入 chrome://version/

  • 下载对应浏览器版本的驱动程序
    PS:驱动版本选择最接近的(大版本一致就行)。

    • Chrom

      • 淘宝镜像下载
      • 官方下载
    • Edge -> Microsoft Edge WebDriver

    • FireFox -> Releases · mozilla/geckodriver (github.com)

  • 解压到特定目录,方便调用

    .\drivers\

快速测试

使用webdriver_manager会直接从网络下载最新版驱动, 不用手动去处理

安装依赖

pip install selenium webdriver-manager packaging

测试代码

from selenium import webdriver

from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
brower = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# from selenium.webdriver.firefox.service import Service
# from webdriver_manager.firefox import GeckoDriverManager
# brower = webdriver.Firefox(service=Service(GeckoDriverManager().install()))

# from selenium.webdriver.edge.service import Service
# from webdriver_manager.microsoft import EdgeChromiumDriverManager
# brower = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()))

brower.get('https://www.baidu.com/')
brower.get('https://www.google.com')

初始化

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

# from config import *

options = webdriver.ChromeOptions()
# 使用其它浏览器需要下载对应驱动
# options = webdriver.FirefoxOptions()
# options = webdriver.EdgeOptions()

# options 配置
...

brower = webdriver.Chrome(service=Service(DRIVER_PATH), options=options)

配置文件

依需求进行配置使用, 详细配置在下文

# 浏览器标头
UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'

PROXY = {127.0.0.1:7890} # 是否使用代理
CACHE_DIR = 'cache' # 缓存文件夹, 使用缓存启用
STEALTH_JS = 'js/stealth.min.js' # 隐藏驱动特征JS文件

驱动路径配置

import platform

if platform.system() == 'Windows':
DRIVER_PATH = 'drivers/win/chromedriver.exe'
elif platform.system() == 'Linux':
# Linux下需赋予驱动执行权限 `sudo chmod +x drivers/chromedriver_linux64/chromedriver`
DRIVER_PATH = 'drivers/linux/chromedriver'
else:
raise Exception(f'!!Error Driver path!!\nUnknown system: {platform.system()}')

常用设置

配置以Chrom为主

  • 设置隐式等待

    brower.implicitly_wait(10)
  • 无头模式

    # Headless
    options.add_argument('--headless')
  • 隐身模式

    options.add_argument('incognito')
  • 浏览器语言

    # lang
    options.add_argument('lang=en_US')
  • 禁用图片加载

    # Disable image loading
    prefs = { 'profile.managed_default_content_settings.images': 2 }
    options.add_experimental_option("prefs", prefs)
  • 设置User-Agent

    # UA
    options.add_argument(f'user-agent={UA}')
  • 设置代理

    # Proxy
    options.add_argument(f'--proxy-server={PROXY}')
  • 设置缓存

    # Cache data
    options.add_argument(f'--user-data-dir={CACHE_DIR}')
  • 设置窗口大小

    # resize
    options.add_argument('window-size=1500,1200')
    # or
    options.add_argument('window-size=1500x1200')
  • 窗口最大化

    options.add_argument('start-maximized')
  • 全屏

    options.add_argument('kiosk')
  • 隐藏滚动条(有可能无效)

    options.add_argument('--hide-scrollbars')
  • 禁用gpu渲染

    options.add_argument('--disable-gpu')
  • 禁用JavaScript

    # Disable JS
    option.add_argument('--disable-javascript')
  • 禁用浏览器弹窗

    # Disable the browser popover
    prefs = {
    'profile.default_content_setting_values' : {
    'notifications' : 2
    }
    }
    options.add_experimental_option('prefs',prefs)
  • 取消自动化提示

    options.add_argument('disable-infobars')
  • 关闭日志输出(保持控制台干净)

    # Close logs
    options.add_experimental_option('excludeSwitches', ['enable-logging'])

浏览器特征隐藏

隐藏驱动标识

# Delete "navigator.webdriver" property
options.add_argument('disable-blink-features=AutomationControlled')

puppeteer

使用puppeteer前端框架隐藏模拟浏览器的指纹特征的JS

项目地址 -> 🚪

stealth.min.js文件生成, 需安装好node.js环境, 不挂代理速度会很慢

# 执行以下语句,会在当前文件夹生成stealth.min.js文件
npx extract-stealth-evasions

又或者直接下载现成的, 相关仓库

https://raw.githubusercontent.com/requireCool/stealth.min.js/main/stealth.min.js

加载JS到浏览器

# 执行隐藏驱动特征JS
with open(STEALTH_JS) as f:
stealth_js = f.read()
brower.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': stealth_js})

进入 https://bot.sannysoft.com 测试效果

brower.get('https://bot.sannysoft.com/')
time.sleep(5)
brower.save_screenshot('walkaround.png')

异常处理

  • 未知报错, 没有报错信息

    ...
    raise exception_class(value)
    selenium.common.exceptions.WebDriverException: Message:

    我这里是因为权限不足导致, 使用管理员权限运行程序即可.

------------ 已触及底线了 感谢您的阅读 ------------
  • 本文作者: OWQ
  • 本文链接: https://www.owq.world/selenium/
  • 版权声明: 本站所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处( ̄︶ ̄)↗