FeiyuYip 发表于 2024-10-22 23:11

selenium调用本地指定版本chrome及chromedriver

本帖最后由 FeiyuYip 于 2024-10-22 23:11 编辑

> 最近chrome又自动更新了,导致原先的chromedriver不匹配,不能使用了。并且chrome更新的版本还特别奇怪,暂时没有匹配的chromedriver,真是头疼……


## chrome及chromedriver下载地址
(https://googlechromelabs.github.io/chrome-for-testing/)

这里下载130.0.6723.58版本的chrome及chromedriver后,解压待用(只测试了32位的)。chrome运行后是这样


(提示Testing版本,不过不影响调试网页)
## selenium调用本地指定版本chrome及chromedriver示例代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service# 新增 Service 导入
from selenium.webdriver.chrome.options import Options
import os


def main(url):
    # Chrome options设置
    chrome_options = Options()
    chrome_options.binary_location = os.path.join(os.getcwd(), 'chrome-win32\chrome.exe')# 放在程序同路径,或可任意指定
    chrome_driver_path = os.path.join(os.getcwd(), 'chromedriver-win32\chromedriver.exe')# 放在程序同路径,或可任意指定

    # 添加无头模式
    # chrome_options.add_argument("--headless")# 静默运行
    # chrome_options.add_argument("--no-sandbox")# 不使用沙箱
    # chrome_options.add_argument("--disable-dev-shm-usage")# 解决DevToolsActivePort文件不存在的错误

    # 使用 Service 传入 ChromeDriver 路径
    chrome_service = Service(chrome_driver_path)

    # 初始化浏览器
    browser = webdriver.Chrome(service=chrome_service, options=chrome_options)

    browser.get(url)

    print(browser.current_url)

    browser.quit()


if __name__ == '__main__':
    url = "https://www.baidu.com"# 示例URL
    main(url)

modeng 发表于 2024-10-23 09:03

可以试试,DrissionPage,坛友介绍的,不需要下载chromedriver

无阻 发表于 2024-10-23 04:12

一般来说都用ChromeDriverManager来自动管理

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from pyefun import *

if __name__ == '__main__':
    创建目录(取运行目录() + "/ChromeDriverManager/")
    # 初始化ChromeDriverManager
    manager = ChromeDriverManager()
    # 获取应该使用的chromeDriver版本号组装成一个文件名
    file = 取运行目录() + "/ChromeDriverManager/" + manager.driver.get_name() + "." + manager.driver.get_driver_version_to_download() + ".exe"
    # 判断指定版本的chromeDriver是否存在于本地
    if os.path.exists(file):
      # 如果指定版本ChromeDriver文件存在于本地则使用下载好的ChromeDriver文件
      chromedriver_path = file
    else:
      # 如果指定版本ChromeDriver文件不存在于本地则下载指定版本的ChromeDriver文件并且保存到本地方便下次使用
      manager.driver.get_driver_version_to_download()
      chromedriver_path = manager.install()
      # 文件保存到本地的ChromeDriverManager目录下
      文件_保存(file, 读入文件(chromedriver_path))
    # 正常注册使用selenium服务
    service = Service(file)
    driver = webdriver.Chrome(service=service)
    url = "https://www.52pojie.net"
    driver.get(url)
    print("请按任意键结束本程序")
    input()

无阻 发表于 2024-10-23 04:18

无阻 发表于 2024-10-23 04:12
一般来说都用ChromeDriverManager来自动管理

from selenium import webdriver ...

这样的话就会自动检测用户安装的Chromme版本和对应的ChromeDriver版本下载使用。
对于打包分发发布比较友好。
一般来说最新版Chrome用上一个版本的ChromeDriver也是可以用的

但是下载ChromeDriver这个步骤还得看网络。
我好几个客户出问题都是网络不好下载的ChromeDriver文件不完全

小空520 发表于 2024-10-23 07:45

第一第一

FeiyuYip 发表于 2024-10-23 08:42

无阻 发表于 2024-10-23 04:18
这样的话就会自动检测用户安装的Chromme版本和对应的ChromeDriver版本下载使用。
对于打包分发发布比较 ...

像您说的,下载的话有时需要看网络
并且我楼上贴的59版本,使用58版本chromedriver,没有办法使用

smme2021 发表于 2024-10-23 09:36

能否禁用chrome的自动更新呢?我觉得问题在于chrome老是自动更新还禁止不了,这才是问题所在

mingkongk 发表于 2024-10-23 10:45

本帖最后由 mingkongk 于 2024-10-23 10:50 编辑

可以从根源上禁止Chrome的自动更新,找到Program Files (x86)中的Chrome的安装目录!禁止update文件夹写入修改权限就能永久禁止
https://imgsrc.baidu.com/forum/pic/item/30adcbef76094b36cc8ee1c9e5cc7cd98d109df2.jpg
https://gitee.com/dd1136161387/md_picture/raw/master/picture/Snipaste_2024-10-23_10-41-25.png

dft2010 发表于 2024-10-23 15:06

不是用edge自动下载比较好么

anning666 发表于 2024-10-23 16:54

不再推荐使用 Selenium 了,被检测率太高了
俺推荐使用 DrissionPage ,效率很高
页: [1] 2
查看完整版本: selenium调用本地指定版本chrome及chromedriver