【web自动化】selenium根据浏览器版本下载对应的chromedriver

1、使用国内的镜像地址

https://registry.npmmirror.com/binary.html?path=chromedriver/

 

2、通过simulation模拟用户点击来下载(只贴出部分方法)

#!/usr/bin/env python  
# -*- coding:utf-8 -*-  
import os
import platform
import signal
import time
import allure
import requests

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait


DRIVER_DOWNLOAD_URL = "https://registry.npmmirror.com/binary.html?path=chromedriver/"


class BaseAction(object):
    def __init__(self, mode=0):
        """
        :param mode: 0: 表示无头模式
        """
        self.mode = mode

        self.options = webdriver.ChromeOptions()

        self.serv = Service(executable_path=r"{}".format(self.get_driver_path_by_sys()))
        self.serv.start()
        self.options.add_argument('--headless')
        self.options.add_argument('--disable-gpu')
        if self.sys_type == 'Windows':
            self.browser = webdriver.Chrome(service=self.serv, options=self.options)
        else:
            self.browser = webdriver.Chrome(executable_path=self.get_driver_path_by_sys(), options=self.options)

        self.browser_version = self.get_browser_ver()

    def get_driver_path_by_sys(self):
        self.sys_type = platform.system()
        if self.sys_type == "Windows":
            debug_logger.info("[web] system type: Windows")
            return os.path.join(PROJECT_ROOT_PATH, 'third_party', 'chromedriver', 'chromedriver_win32',
                                'chromedriver.exe')
        elif self.sys_type == "Linux":
            debug_logger.info("[web] system type: Linux")
            return os.path.join(PROJECT_ROOT_PATH, 'third_party', 'chromedriver', 'chromedriver_linux64',
                                'chromedriver')
        else:
            raise Exception("[web]system not support!")

    def get_browser_ver(self):
        self.open_url("http://www.baidu.com/")
        time.sleep(1)
        logger.info("[web]浏览器version:{}".format(self.browser.capabilities.get("browserVersion")))
        return self.browser.capabilities.get("browserVersion")

    def open_url(self, url):
        self.browser.get(url)
        time.sleep(2)
        self.wait = WebDriverWait(self.browser, 20)
        self.browser.maximize_window()def close(self):
        time.sleep(2)
        self.browser.close()
        self.browser.quit()
        self.serv.stop()

    def get_driver_uri(self):
        # 获取webdriver下载列表
        self.open_url(DRIVER_DOWNLOAD_URL)
        # 下载并更新当前webdriver列表
        ele = self.browser.find_elements(By.XPATH, '/html/body/table/tbody/tr/td/a')

        like_version_list = []
        for e in ele:
            if e.text.startswith(self.browser_version.rsplit(".", 1)[0]):
                like_version_list.append(e.text)
        logger.info(f'[web] like_version_list: {like_version_list}')
        # 获取最新版本
        logger.info(f'[web] version_uri: {max(like_version_list)}')
        version_uri = max(like_version_list)
        return version_uri

    def get_system_download_url(self):
        version_uri = self.get_driver_uri()
        self.open_url(DRIVER_DOWNLOAD_URL + version_uri)
        ele = self.browser.find_elements(By.XPATH, '/html/body/table/tbody/tr/td/a')
        url_list = [e.get_attribute('href') for e in ele]
        logger.info(f'[web] url_list: {url_list}')

        if platform.system() == "Windows":
            download_url = [d_url for d_url in url_list if "win" in d_url][0]
        elif platform.system() == "Linux":
            download_url = [d_url for d_url in url_list if "linux" in d_url][0]
        else:
            download_url = None
        logger.info(f'[web] download_url: {download_url}')
        return download_url

    def download_driver_to_local(self):
        download_url = self.get_system_download_url()
        rsp = requests.get(download_url)
        # 删除本地driver文件
        driver_path = self.get_driver_path_by_sys()
        # 关闭占用
        self.close()
        driver_dir = os.path.dirname(driver_path)
        logger.info(f'[web] dir content: {os.listdir(driver_dir)}')
        p_pid = get_pid("chromedriver.exe")
        if p_pid:
            os.kill(p_pid, signal.SIGINT)
        os.unlink(driver_path)
        # 写入下载的文件
        file_name = download_url.rsplit("/", 1)[-1]
        file_dir = os.path.join(driver_dir, file_name)
        with open(file_dir, mode='wb') as f:
            f.write(rsp.content)
        logger.info(f'[web] dir content: {os.listdir(driver_dir)}')
        # 解压文件到当前目录
        unzip_file(file_dir, driver_dir)


if __name__ == '__main__':
    action = BaseAction(mode=0)
    action.download_driver_to_local()

 

原文地址:https://www.cnblogs.com/fireblackman/p/16603250.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


转载地址:https://www.cnblogs.com/mini-monkey/p/12104821.html前言有时候测试过程中会遇到日期控件场景,这时候需要特殊处理,下文以12306网站为例1.处理方式通常是通过js去除只读属性(2种方法),然后通过send_keys重新写值fromtimeimportsleepdriver=webdriver.Chrome()dr
web自动化测试过程中页面截图相对比较简单,可以直接使用selenium自带的方法save_screenshot()。示例:对百度首页整个页面进行截图。#coding=utf-8fromseleniumimportwebdriverd=webdriver.Chrome()d.get('https://www.baidu.com/')#对页面进行截图d.save_screensh
目录前言一、Selenium简介二、浏览器驱动1.浏览器驱动参考2.Windows下载Chrome驱动三、代码实现1.新建控制台项目WeatherWebCrawler2.选择.NET6.03.安装NuGet包4.将下载好的驱动放到项目生成目录下5.编写代码四、完整代码总结前言提示:爬虫本身并不违法,所有爬虫都
一、iframe的含义:iframe是HTML中框架的一种形式,在对界面添加嵌套另一个页面时可以使用iframe。做ui自动化的时候,元素定位不到的一个很重要原因就是页面存在iframe。Iframe可以比喻成一道门,打开这道门才能进入屋子里。二、怎么判断页面上存在iframe?谷歌浏览器F12(或者右
转载请注明出处❤️作者:测试蔡坨坨原文链接:caituotuo.top/d59b986c.html你好,我是测试蔡坨坨。众所周知,Selenium在2021年10月13号发布了Selenium4,目前最新的版本应该是Selenium4.4.0。以前一直用的Selenium3,那么Selenium4相对Selenium3对我们做自动化测试来说有哪些需要注意的
'''##**认识selenium**​**下载:pipinstallselenium**​官方文档:https://selenium-python.readthedocs.io/###什么是selenium?​selenium是一套完整的web应用程序测试系统,包含了测试的录制(seleniumIDE),编写及运行(SeleniumRemoteControl)和测试的并行处理(SeleniumGr
importtimefromselenium.webdriver.support.waitimportWebDriverWaitfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydriver=webdriver.Chrome(r"D:\百分浏览器\CentBrowser\Application\chromedriver.exe");driver.get("htt
前言:当鼠标悬停在隐藏文本内容上时,显示所有内容。场景案例:百度首页,要选择‘高级搜索’,先得把鼠标放在‘设置上’F12-在页面中搜索‘高级搜索’,找到‘高级搜索’文本,鼠标放到‘设置’上,display的值变为block;鼠标不放上去之前是none,即不可见元素。隐藏的元素操作,会出现报
selenium中的ActionChains初始化时传入driverActionChains中存储的所有行为click(on_element=None)——单击鼠标左键click_and_hold(on_element=None)——点击鼠标左键,不松开context_click(on_element=None)——点击鼠标右键double_click(on_element=None)——双击鼠标
介绍常见的表单元素 Input,button,checkbox,select。表单使用表单标签(<form>)定义。例如:<form><input/></form> 保存HTML到本地进行操作<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title&g
1、处理定位报错的问题判断该元素存在,再输入。判断该元素不存在,抛出异常。依然是通过EC这个模块。2、判断是否存在邮箱地址,存在,再操作。就不用担心元素不存在,程序报错。3、判断传入的元素是否可见,是否在显示范围内。还是要先找元素但这样找,只能顺利的执行一次。fr
1、使用国内的镜像地址https:/egistry.npmmirror.com/binary.html?path=chromedriver/ 2、通过simulation模拟用户点击来下载(只贴出部分方法)#!/usr/bin/envpython#-*-coding:utf-8-*-importosimportplatformimportsignalimporttimeimportallureimport
案例描述https://www.healthsmart.com.hk/hs-home/#!/link/home这个网页你手工打开的时候你会发现一直处于加载中,一定时间后才好。我们的需求是点击会员,弹出菜单,进行下一步操作,如果没有加载好是点不了的(业务特点)。我们来看看代码怎么写示例代码1:时间去哪里了fromselen
  分析了好几个小时淘宝的登陆,对其反爬虫方案有了点思路,先记录一下,后面会持续进行分析。当然想要玩更高级的Python爬虫首先你要把基础打牢,这里小编准备了一份Python爬虫入门资料,进群:700341555即可免费领取!  众所周知目前使用selenium打开浏览器访问淘宝,不管你是手动
在python+selenium中经常会遇到找到的元素不唯一,导致定位到的元素不是预期的或者定位不到元素解决方法:只要在页面进行确认找到的元素唯一后,再进行操作 页面确认方法:1、通过html中检索功能确认进入开发者模式:点击右上角三个点-->选则search进行查找或
引入       使用Scrapy框架爬取某些网站的数据时,往往会页面动态加载数据的情况。如果是直接使用Scrapy对其url发起请求,是绝对获取不到动态加载的数据的。但是通过观察我们会发现,通过浏览器对其url发起请求则会加载出对应的动态数据。那么,如果我们想要在Scrapy中获取
孤荷凌寒自学python第八十五天配置selenium并进行模拟浏览器操作1 (完整学习过程屏幕记录视频地址在文末) 要模拟进行浏览器操作,只用requests是不行的,因此今天了解到有专门的解决方案:selenium模块及与火狐浏览器的配合使用。一、环境配置(一)、安装selenium模块pipinstallse
selenium确认进入了预期页面在自动化操作中,浏览器每次进入一个新的需要,都需要确认该页面是否打开或打开的页面是否是预期的页面需要进行确认页面后方可进行下一步操作确认页面有很多中方法,像笔者所在项目的中每个页面都有一个固定属性(ng-page=‘xxx’)来确认,所以确认页面的时候