全网网站建设优化/东莞关键词seo

全网网站建设优化,东莞关键词seo,做网站要用写接口6,襄阳做网站 优帮云Python自动化测试 之 DrissionPage 使用详解 🏡前言:一、☀️DrissionPage的基本概述二、 🗺️环境安装2.1 ✅️️运行环境2.2 ✅️️一键安装 三、🗺️快速入门3.1 页面类🛰️ChromiumPage🛫 SessionPage&…

Python自动化测试 之 DrissionPage 使用详解

    • 🏡前言:
    • 一、☀️DrissionPage的基本概述
    • 二、 🗺️环境安装
      • 2.1 ✅️️运行环境
      • 2.2 ✅️️一键安装
    • 三、🗺️快速入门
      • 3.1 页面类
        • 🛰️ChromiumPage
        • 🛫 SessionPage
        • 🔎WebPage
      • 3.2 🌏 准备工作
        • 3.2.1 尝试启动浏览器
        • 3.2.2 设置浏览器驱动路径
        • 3.2.3 🌏️控制浏览器
      • 3.3 收发数据包
      • 3.4 模式切换
    • 四、🗺️ChromiumPage详解
      • 4.1 启动和接管浏览器
        • 4.1.1 启动浏览器
        • 4.1.2 接管浏览器
        • 4.1.3 多浏览器共存
      • 4.2 页面交互
      • 4.3 查找元素
      • 4.4 获取元素信息的常用属性或方法
    • 五、🗺️SessionPage详解
      • 5.1 get请求
      • 5.2 post请求
      • 5.3 page对象常用属性
    • 六、🗺️WebPage详解
    • 扩展
      • ⭐下载文件
      • 🥬设置 cookies
      • ❓ 常见问题

🏡前言:

之前分享过一篇关于 自动化测试框架 Selenium 使用的文章: Python自动化测试 环境搭建 Selenium、WebDriver下载、安装、配置、基本使用详解,虽然 Selenium也很强大,但在使用下来后,感觉DrissionPage操作更简单、功能更强大一些(不像Selenium 会担心WebDriver版本对不上无法运行等情况),尤其是对新手入门来讲,DrissionPage是非常值得推荐学习的。

一、☀️DrissionPage的基本概述

DrissionPage 是一个基于 python 的网页自动化工具。它既能控制浏览器,也能像requests一样收发数据包,更重要的是还能把两者合二为一。因此,简单来说DrissionPage可兼顾浏览器自动化的便利性和 requests 的高效率。
DrissionPage功能强大,内置无数人性化设计和便捷功能。并且它的语法简洁而优雅,代码量少,对新手友好。

drissionpage

🚀官网:https://drissionpage.cn/

📚文档:https://drissionpage.cn/browser_control/intro

💖 特性:
✅️️ 强大的自研内核

  • 不依赖 webdriver
  • 无需为不同版本的浏览器下载不同的驱动
  • 运行速度更快
  • 可以跨 iframe 查找元素,无需切入切出
  • 可同时操作多个标签页,无需切换
  • 方便好用的数据包监听功能
  • 可处理非open状态的 shadow-root

✅️️ 极简的定位语法

  • 制定了一套简洁高效的查找元素语法,支持链式操作,支持相对定位。
  • 每次查找内置等待,可以独立设置每次查找超时时间。

✅️️ 更多便捷的功能

  • 可对整个网页截图,包括视口外的部分
  • 每次运行程序可以反复使用已经打开的浏览器,无需每次从头运行
  • s 模式访问网页时会自动纠正编码,无需手动设置
  • s 模式在连接时会自动根据当前域名自动填写Host和Referer属性
  • 下载工具支持多种方式处理文件名冲突、自动创建目标路径、断链重试等
  • 支持直接获取after和before伪元素的内容
  • 上传文件可直接拦截文件选择框并输入路径,无需依靠 GUI 或查找元素输入

二、 🗺️环境安装

2.1 ✅️️运行环境

操作系统:Windows、Linux 或 Mac。

python 版本:3.6 及以上

支持浏览器:Chromium 内核(如 Chrome 和 Edge)

2.2 ✅️️一键安装

使用 pip 安装 DrissionPage:

# 安装最新版本
pip install DrissionPage# 如果已安装,可以在命令后面加上 --upgrade 参数 升级到最新版本
pip install DrissionPage --upgrade# 指定版本升级
pip install DrissionPage==4.0.0b17

三、🗺️快速入门

3.1 页面类

在DrissionPage框架中,有一个非常重要的工具叫做“页面类”,主要用于控制浏览器 和 收发数据包。DrissionPage 包含三种主要页面类。我们可以根据自己的需要选择使用。

🛰️ChromiumPage

如果只要控制浏览器,导入ChromiumPage

from DrissionPage import ChromiumPage
🛫 SessionPage

如果只要收发数据包,导入SessionPage

from DrissionPage import SessionPage
🔎WebPage

WebPage是功能最全面的页面类,既可控制浏览器,也可收发数据包。

from DrissionPage import WebPage

3.2 🌏 准备工作

如果只使用收发数据包功能,无需任何准备工作。
如果要控制浏览器,需设置浏览器路径。程序默认设置控制 Chrome,所以下面用 Chrome 演示。

开始前,我们先设置一下浏览器路径。
程序默认控制 Chrome,所以下面用 Chrome 演示。 如果要使用 Edge 或其它 Chromium 内核浏览器,设置方法是一样的。

3.2.1 尝试启动浏览器

默认状态下,程序会自动在系统内查找 Chrome 路径。
执行以下代码,浏览器启动并且访问了相关网站,如果访问执行成功说明可直接使用,跳过后面的步骤即可。

from DrissionPage import ChromiumPagepage = ChromiumPage()
page.get('https://www.baidu.com')
3.2.2 设置浏览器驱动路径

如果上面的步骤提示出错,说明程序没在系统里找到 Chrome 浏览器。
可用以下其中一种方法设置,设置会持久化记录到默认配置文件,之后程序会使用该设置启动。
在这里插入图片描述

  • 📌方法1

    • 新建一个临时 py 文件,并输入以下代码,填入您电脑里的 Chrome 浏览器可执行文件路径,然后运行。

      from DrissionPage import ChromiumOptionspath = r'D:\Chrome\Chrome.exe'  # 请改为你电脑内Chrome可执行文件路径
      ChromiumOptions().set_browser_path(path).save()
      

      这段代码会把浏览器路径记录到配置文件,今后启动浏览器皆以新路径为准。
      另外,如果是想临时切换浏览器路径以尝试运行和操作是否正常,可以去掉 .save(),以如下方式结合第1️⃣步的代码。

      from DrissionPage import ChromiumPage, ChromiumOptionspath = r'C:\Users\Administrator\AppData\Local\Google\Chrome SxS\Application\chrome.exe'  # 请改为你电脑内Chrome可执行文件路径
      co = ChromiumOptions().set_browser_path(path)
      page = ChromiumPage(co)
      page.get('http://DrissionPage.cn')
      
  • 📌方法2

    • 在命令行输入以下命令(路径改成自己电脑里的):

      dp -p C:\Users\Administrator\AppData\Local\Google\Chrome SxS\Application\chrome.exe
      

      ⚠️注意命令行的 python 环境与项目应是同一个
      ⚠️注意要先使用 cd 命令定位到项目路径

现在,请重新执行第1️⃣步的代码,如果正确访问了目标网址,说明已经设置完成。

from DrissionPage import ChromiumPagepage = ChromiumPage()
page.get('https://www.baidu.com')

✅️️ OK,当您完成以上准备工作以后,无需关闭浏览器,后面的上手示例可继续接管当前浏览器。

3.2.3 🌏️控制浏览器

现在,我们通过一些例子,来直观感受一下 DrissionPage 的工作方式。

本示例演示使用ChromiumPage控制浏览器登录 gitee 网站。

from DrissionPage import ChromiumPage# 创建页面对象,并启动浏览器
page = ChromiumPage()
# 跳转到登录页面
page.get('https://gitee.com/login')# 定位到账号文本框,获取文本框元素
ele = page.ele('#user_login')
# 输入对文本框输入账号  
ele.input('你的账号')
# 定位到密码文本框并输入密码
page.ele('#user_password').input('你的密码')
# 点击登录按钮:@attrName=value,这是根据属性和属性值进行标签定位的方式
page.ele('@value=登 录').click()

注意:ele()方法用于查找元素,它返回一个ChromiumElement对象,用于操作元素。值得一提的是,ele()内置了等待,如果元素未加载,它会执行等待,直到元素出现或到达时限。默认超时时间 10 秒。

3.3 收发数据包

本示例演示用SessionPage已收发数据包的方式采集 gitee 网站数据。这个示例的目标,要获取所有库的名称和链接,为避免对网站造成压力,我们只采集 3 页。网址:https://gitee.com/explore/all

from DrissionPage import SessionPage# 创建页面/请求对象
page = SessionPage()# 爬取3页
for i in range(1, 4):# 访问某一页的网页page.get(f'https://gitee.com/explore/all?page={i}')# 获取所有开源库<a>元素列表(所有库的链接的a标签的class属性值都是一样的)links = page.eles('.title project-namespace-path')# 遍历所有<a>元素for link in links:# 打印链接信息:print(link.text, link.link)

.text获取元素的文本,.link获取元素的hrefsrc属性。

3.4 模式切换

这个示例演示WebPage如何切换控制浏览器和收发数据包两种模式。
通常,切换模式是用来应付登录检查很严格的网站,可以用控制浏览器的形式处理登录,再转换模式用收发数据包的形式来采集数据。

实例:基于浏览器控制模式进行gitee的登陆,登录成功后切换模式基于收发数据包的性质访问该账户的个人主页,获取该账户主页左下角所有的组织名称。

from DrissionPage import ChromiumOptions
from DrissionPage import WebPage# 创建页面对象
page = WebPage()
# 访问网址,进行登录
page.get('https://gitee.com/login?redirect_to_url=%2F')
# 定位到账号文本框,获取文本框元素
ele = page.ele('#user_login')
# 输入对文本框输入账号
ele.input('你的账号')
# 定位到密码文本框并输入密码
page.ele('#user_password').input('你的密码')
# 点击登录按钮:@attrName=value,这是根据属性和属性值进行标签定位的方式
page.ele('@value=登 录').click()# 切换到收发数据包模式
page.change_mode() #切换的时候程序会在新模式重新访问当前 url。
#切换模式后,重新访问基于登录状态后新的url(个人主页)
page.get('https://gitee.com/muguilin')# 根据class属性值获取div标签,然后将该div下面class为item的元素标签批量获取
items = page.ele('.ui middle aligned list').eles('.item')
# 遍历获取到的元素
for item in items:# 打印元素文本print(item('.content').text)

四、🗺️ChromiumPage详解

顾名思义,ChromiumPage是 Chromium 内核浏览器的页面,使用它,我们可与网页进行交互,如调整窗口大小、滚动页面、操作弹出框等等。还可以跟页面中的元素进行交互,如输入文字、点击按钮、选择下拉菜单、在页面或元素上运行 JavaScript 代码等等。

可以说,操控浏览器的绝大部分操作,都可以由ChromiumPage及其衍生的对象完成,而它们的功能,还在不断增加。除了与页面和元素的交互,ChromiumPage还扮演着浏览器控制器的角色,可以说,一个ChromiumPage对象,就是一个浏览器。

4.1 启动和接管浏览器

ChromiumPage()创建页面对象。根据不同的配置,可以接管已打开的浏览器,也可以启动新的浏览器。程序结束时,被打开的浏览器不会主动关闭,以便下次运行程序时使用(由 VSCode 启动的会被关闭)。

4.1.1 启动浏览器

这种方式代码最简洁,程序会使用默认配置,自动生成页面对象。创建ChromiumPage对象时会在指定端口启动浏览器。默认情况下,程序使用 9222 端口。

from DrissionPage import ChromiumPagepage = ChromiumPage()

指定端口启动浏览器:

# 启动9333端口的浏览器,如该端口空闲,启动一个浏览器
page = ChromiumPage(9333)
4.1.2 接管浏览器

当页面对象创建时,只要指定的端口port已有浏览器在运行,就会直接接管。无论浏览器是哪种方式启动的。比如:先通过如下代码启动一个端口为8888的浏览器

from DrissionPage import ChromiumPagepage = ChromiumPage(666)

在启动的端口为8888的浏览器中,手动访问百度页面,然后使用如下程序测试是否可以接管该浏览器:

from DrissionPage import ChromiumPagepage = ChromiumPage(666)
#打印接管浏览器的page标题和访问的url
print(page.title,page.url)
4.1.3 多浏览器共存

如果想要同时操作多个浏览器,或者自己在使用其中一个上网,同时控制另外几个浏览器跑自动化,就需要给这些被程序控制的浏览器设置单独的端口用户文件夹,否则会造成冲突。

from DrissionPage import ChromiumPage, ChromiumOptions# 创建多个配置对象,每个指定不同的端口号和用户文件夹路径
do1 = ChromiumOptions().set_paths(local_port=9111, user_data_path=r'D:\data1')
do2 = ChromiumOptions().set_paths(local_port=9222, user_data_path=r'D:\data2')# 创建多个页面对象
page1 = ChromiumPage(addr_or_opts=do1)
page2 = ChromiumPage(addr_or_opts=do2)# 每个页面对象控制一个浏览器
page1.get('https://www.baidu.com')
page2.get('http://www.163.com')

4.2 页面交互

  • get():该方法用于跳转到一个网址。当连接失败时,程序会进行重试。

    page.get('https://www.baidu.com')
    
  • back():此方法用于在浏览历史中后退若干步。

    page.back(2)  # 后退两个网页
    
  • forward():此方法用于在浏览历史中前进若干步。

    page.forward(2)  # 前进两步
    
  • refresh():此方法用于刷新当前页面。

    page.refresh()  # 刷新页面
    
  • run_js():此方法用于执行 js 脚本。

    # 用传入参数的方式执行 js 脚本显示弹出框显示 Hello world!
    #参数1:执行的js脚本。参数2:*args表示给js脚本传递的参数
    page.run_js('alert(arguments[0]+arguments[1]);', 'Hello', ' world!')
    
  • run_js_loaded():此方法用于运行 js 脚本,执行前等待页面加载完毕。

    page.run_js_loaded('alert(arguments[0]+arguments[1]);', 'Hello', ' world!')
    
  • scroll.to_bottom():此方法用于滚动页面到底部,水平位置不变。

    page.scroll.to_bottom()
    

4.3 查找元素

本节介绍 DrissionPage 自创的查找元素语法。
查找语法能用于指明以哪种方式去查找指定元素,定位语法简洁明了,熟练使用可大幅提高程序可读性。

🔦 更多页面或元素内查找:https://drissionpage.cn/browser_control/get_elements/find_in_object

以下使用这个页面进行讲解test.html(可以在pycharm中使用chrome打开该页面获取页面链接):

<html>
<body>
<div id="one"><p class="p_cls" id="row1" data="a">第一行</p><p class="p_cls" id="row2" data="b">第二行</p><p class="p_cls">第三行</p>
</div>
<div id="two">第二个div
</div>
</body>
</html>

基本定位语法:注意下面的ele和eles

page.ele:只能定位满足要求第一次出现的标签

page.eles:定位到满足要求所有的标签

from DrissionPage import ChromiumPagepage = ChromiumPage()
page.get('http://localhost:63342/Code/test.html?_ijt=chuqtur5cikh95asobefg123mf')
#id属性定位
tag1 = page.ele('@id=one')  # 获取第一个id为one的元素#文本定位
tag2 = page.ele('@text()=第一行')  # 获取第一个文本为“第一行”的元素#当需要多个条件同时确定一个元素时,每个属性用'@@'开头。
tag3 = page.ele('@@class=p_cls@@text()=第三行')  # 查找class为p_cls且文本为“第三行”的元素#当需要以或关系条件查找元素时,每个属性用'@|'开头。
tag4 = page.eles('@|id=row1@|id=row2')  # 查找所有id为row1或id为row2的元素#表示模糊匹配,匹配含有指定字符串的文本或属性。
tag5 = page.eles('@id:ow')  # 获取id属性包含'ow'的元素#表示匹配开头,匹配开头为指定字符串的文本或属性。
tag6 = page.eles('@id^row')  # 获取id属性以'row'开头的元素#表示匹配结尾,匹配结尾为指定字符串的文本或属性。
tag7 = page.ele('@id$w1')  # 获取id属性以'w1'结尾的元素print(tag7)

选择器定位语法

id选择器定位:

ele1 = page.ele('#one')  # 查找id为one的元素
ele2 = page.ele('#=one')  # 和上面一行一致
ele3 = page.ele('#:ne')  # 查找id属性包含ne的元素
ele4 = page.ele('#^on')  # 查找id属性以on开头的元素
ele5 = page.ele('#$ne')  # 查找id属性以ne结尾的元素

class选择器定位:

e1 = page.ele('.p_cls')  # 查找class属性为p_cls的元素
e2 = page.ele('.=p_cls')  # 与上一行一致
e3 = page.ele('.:_cls')  # 查找class属性包含_cls的元素
e4 = page.ele('.^p_')  # 查找class属性以p_开头的元素
e5 = page.ele('.$_cls')  # 查找class属性以_cls结尾的元素

文本选择器定位:

element1 = page.ele('text=第二行')  # 查找文本为“第二行”的元素
element2 = page.ele('text:第二')  # 查找文本包含“第二”的元素
element3 = page.ele('第二')  # 与上一行一致

标签选择器定位:

ele1 = page.ele('tag:div')  # 查找第一个div元素
ele2 = page.ele('tag:p@class=p_cls')  # 与单属性查找配合使用
ele3 = page.ele('tag:p@@class=p_cls@@text()=第二行')  # 与多属性查找配合使用

xpath定位:

eles = page.eles('xpath://div/p[@id="row1"]')

🚀查看更多语法:https://drissionpage.cn/browser_control/get_elements/sheet

4.4 获取元素信息的常用属性或方法

属性或方法说明
html此属性返回元素的 HTML 文本(不包括<iframe>内容)
inner_html此属性返回元素内部的 HTML 文本
tag此属性返回元素的标签名
text此属性返回元素内所有文本组合成的字符串
texts()此方法返回元素内所有直接子节点的文本(列表)
attrs此属性以字典形式返回元素所有属性及值
attr('attrName')此方法返回元素某个 attribute 属性值
link此方法返回元素的 href 属性或 src 属性
xpath此属性返回当前元素在页面中 xpath 的绝对路径

元素列表中批量获取信息

eles()等返回的元素列表,自带get属性,可用于获取指定信息。

from DrissionPage import SessionPagepage = SessionPage()
page.get('https://www.baidu.com')
eles = page.ele('#s-top-left').eles('t:a')
print(eles.get.texts())  # 获取所有元素的文本
print(eles.get.links())  # 获取所有元素的链接
print(eles.get.attrs("class"))  # 获取所有元素的指定属性值

五、🗺️SessionPage详解

顾名思义,SessionPage是一个使用Session(requests 库)对象的页面,且它还封装了网络连接和 html 解析功能,使收发数据包也可以像操作页面一样便利。
并且,由于加入了本库独创的查找元素方法,使数据的采集便利性远超 requests + beautifulsoup 等组合。

🚀了解更多:https://drissionpage.cn/SessionPage/intro
获取 gitee 推荐项目第一页所有项目。

# 导入
from DrissionPage import SessionPage
# 创建页面对象
page = SessionPage()
# 访问网页
page.get('https://gitee.com/explore/all')
# 在页面中查找元素
items = page.eles('tag:h3')
# 遍历元素
for item in items[:-1]:# 获取当前<h3>元素下的<a>元素lnk = item('tag:a')# 打印<a>元素文本和href属性print(lnk.text, lnk.link)

5.1 get请求

get()方法语法与 requests 的get()方法一致,在此基础上增加了连接失败重试功能。与 requests 不一样的是,它不返回Response对象,而是返回一个bool值,表示请求是否成功。

示例:请求51游戏指定关键字对应的搜索结果页面

from DrissionPage import SessionPagepage = SessionPage()
url = 'https://game.51.com/search/action/game/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'}
cookies = {'name': 'value'}
# proxies = {'http': '127.0.0.1:1080', 'https': '127.0.0.1:1080'}
param = {"q":'传奇'}
page.get(url, headers=headers, cookies=cookies,params=param,proxies=None)
print(page.html,page.title)

其他参数:

在这里插入图片描述

5.2 post请求

请求:中国人事考试网—站内搜索:http://www.cpta.com.cn/category/search.html

from DrissionPage import SessionPagepage = SessionPage()
url = 'http://www.cpta.com.cn/category/search'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'}
cookies = {'name': 'value'}
# proxies = {'http': '127.0.0.1:1080', 'https': '127.0.0.1:1080'}
data = {"keywords":'财务','搜索':'搜索'}
page.post(url, headers=headers, cookies=cookies,data=data,proxies=None)
print(page.html,page.title)

注意:在get和post请求中,headers中的User-Agent可以不写,因为SessionPage和WebPage在创建页面对象时会自动加载一个ini的配置文件,该配置文件中已经存在了User-Agent。

ini 文件初始内容如下:

......
[session_options]
headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8', 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'connection': 'keep-alive', 'accept-charset': 'GB2312,utf-8;q=0.7,*;q=0.7'}[timeouts]
base = 10
page_load = 30
script = 30[proxies]
http =
https = [others]
retry_times = 3
retry_interval = 2

5.3 page对象常用属性

url:此属性返回当前访问的 url。
title:此属性返回当前页面title文本。
raw_data:此属性返回访问到的二进制数据,即Response对象的content属性。
html:此属性返回当前页面 html 文本。
json:此属性把返回内容解析成 json。比如请求接口时,若返回内容是 json 格式,用html属性获取的话会得到一个字符串,用此属性获取可将其解析成dict。

六、🗺️WebPage详解

WebPage覆盖了ChromiumPage所有功能,并且增加了切换模式功能,创建的标签页对象为MixTab。

from DrissionPage import WebPagepage = WebPage()page.get('https://gitee.com/login')# 定位到账号文本框,获取文本框元素
ele = page.ele('#user_login')# 输入对文本框输入账号
ele.input('你的账号')# 定位到密码文本框并输入密码
page.ele('#user_password').input('你的密码')# 点击登录按钮
page.ele('@value=登 录').click()"""
登录成功后,就可以进行相应的请求发送了
"""
# 模式切换 https://drissionpage.cn/get_start/examples/switch_mode
page.change_mode()# 获取个人主页的推荐项目
self_page = 'https://gitee.com/muguilin'
page.get(self_page)# 获取所有行元素
items = page.ele('#popular-pinned-projects').eles('.ui card fluid')
# 遍历获取到的元素
for item in items:# 打印元素文本# print(item('t:h3').text)print(item('.content').text)print()

扩展

⭐下载文件

DrissionPage 带一个简便易用的下载器,一行即可实现下载功能。

from DrissionPage import SessionPageurl = 'https://www.baidu.com/img/flexible/logo/pc/result.png'
save_path = r'C:\download'page = SessionPage()
page.download(url, save_path)

🥬设置 cookies

🥦 设置 cookieshttps://drissionpage.cn/tutorials/functions/set_cookies
页面对象中设置

任意页面对象都有set.cookies()方法,用于设置 cookies。
该方法接收多种格式的 cookies 信息,可设置一个或多个 cookies。
使用浏览器时,任意页面对象设置的 cookies 是所有标签页共用的(由new_tab(new_context=True)创建的标签页除外)。

示例:

from DrissionPage import Chromiumtab = Chromium().latest_tab
cookies = 'name1=value1; name2=value2; path=/; domain=.example.com;'tab.set.cookies(cookies)

删除 cookies
页面对象用set.cookies.remove()和set.cookies.clear()删除和清空 cookies。
SessionOptions对象用set_cookies(None)清空 cookies。
具体用法详见使用文档有关章节。

❓ 常见问题

❔ 如何禁用保存密码、恢复页面等提示气泡?
浏览器提示气泡出现时可以手动关闭,不关闭也不影响自动操作,在代码中阻止其显示也是可以的。 加一些浏览器配置代码即可禁止相应的气泡显示,需要添加下面这样的代码:

co = ChromiumOptions()# 阻止“自动保存密码”的提示气泡
co.set_pref('credentials_enable_service', False)# 阻止“要恢复页面吗?Chrome未正确关闭”的提示气泡
co.set_argument('--hide-crash-restore-bubble')

❔ 如何使用启动参数、用户配置、实验项等功能?
arguments 启动参数

  • 使用参考:http://DrissionPage.cn/ChromiumPage/browser_opt#-set_argument

  • 参数详见:https://peter.sh/experiments/chromium-command-line-switches/
    prefs 用户配置

  • 使用参考:http://DrissionPage.cn/ChromiumPage/browser_opt#-set_pref

  • 参数详见:https://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/pref_names.cc
    flags 实验项

  • 使用参考:http://DrissionPage.cn/ChromiumPage/browser_opt#-set_flag

  • 参数详见:chrome://flags

🚀更多常见问题https://drissionpage.cn/tutorials/QandA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/73254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【操作系统安全】任务3:Linux 网络安全实战命令手册

目录 一、基础网络信息获取 1. 网络接口配置 2. 路由表管理 3. 服务端口监控 二、网络监控与分析 1. 实时流量监控 2. 数据包捕获 3. 网络协议分析 三、渗透测试工具集 1. 端口扫描 2. 漏洞利用 3. 密码破解 四、日志审计与分析 1. 系统日志处理 2. 入侵检测 3…

社群经济4.0时代:开源链动模式与AI技术驱动的电商生态重构

摘要&#xff1a;在Web3.0技术浪潮与私域流量红利的双重驱动下&#xff0c;电商行业正经历从"流量收割"到"用户深耕"的范式转变。本文基于社群经济理论框架&#xff0c;结合"开源链动21模式"、AI智能名片、S2B2C商城小程序源码等创新工具&#x…

从技术架构和生态考虑,不是单纯的配置优化,还有哪些方式可以提高spark的计算性能

从技术架构和生态系统层面提升Spark的计算性能&#xff0c;可采取以下核心策略&#xff1a; 一、计算模型重构与执行引擎升级 1. 弹性分布式数据集&#xff08;RDD&#xff09;的血统优化 通过RDD的Lineage&#xff08;血统&#xff09;机制实现容错时&#xff0c;采用增量式…

AI对软件工程(software engineering)的影响在哪些方面?

AI对软件工程&#xff08;software engineering&#xff09;的影响是全方位且深远的&#xff0c;它不仅改变了传统开发流程&#xff0c;还重新定义了工程师的角色和软件系统的构建方式。以下是AI影响软件工程的核心维度&#xff1a; 一、开发流程的智能化重构 需求工程革命 • …

数据库取证分析

目录 一.多表关联 1.一对多联结 2.子查询 二.数据库示例分析 1.多表关联 三.选择SQL分析的原因 四.数据库概述 五.SQL语言 一.多表关联 1.一对多联结 2.子查询 二.数据库示例分析 1.多表关联 三.选择SQL分析的原因 四.数据库概述 五.SQL语言 1.select 字段

Docker 部署 Graylog 日志管理系统

Docker 部署 Graylog 日志管理系统 前言一、准备工作二、Docker Compose 配置三、启动 Graylog 服务四、访问 Graylog Web 界面总结 前言 Graylog 是一个开源的日志管理平台&#xff0c;专为实时日志收集、分析和可视化设计。它支持强大的搜索功能&#xff0c;并且与 Elastics…

Matlab2024a免费版下载教程

Matlab是一个高性能的数学计算与仿真软件&#xff0c;广泛应用于科学计算、数据分析、算法开发以及工程绘图等多个领域。它提供了强大的矩阵运算能力、丰富的内置函数库以及灵活的编程环境&#xff0c;使得用户能够高效地解决复杂的数学问题。本文&#xff0c;我将为大家详细介…

网络运维学习笔记(DeepSeek优化版) 022 HCIP-Datacom路由概念、BFD协议详解与OSPF第一课

文章目录 路由概念、BFD协议详解与OSPF第一课一、路由协议优先级与选路原则1.1 路由协议优先级对照表1.2 路由选路核心原则 二、BFD&#xff08;Bidirectional Forwarding Detection&#xff0c;双向转发检测&#xff09;的配置与应用2.1 双向心跳探测&#xff08;双端配置&…

【基础】Windows 中通过 VSCode 使用 GCC 编译调试 C++

准备 安装 VSCode 及 C 插件。通过 MSYS2 安装 MinGW-w64 工具链&#xff0c;为您提供必要的工具来编译代码、调试代码并配置它以使用IntelliSense。参考&#xff1a;Windows 中的 Linux 开发工具链 验证安装&#xff1a; gcc --version g --version gdb --version三个核心配…

python机器学习——新手入门学习笔记

一&#xff0c;概论 1.什么是机器学习 定义&#xff1a; 机器学习是从数据中自动分析获得模型&#xff0c;并利用模型对未知数据进行预测。 其实就是通过问题和数据&#xff0c;发现规律&#xff0c;并进行预测&#xff0c;与人脑相似。目的就是从历史数据当中获得规律&#x…

Packaging Process

Packaging Process 软包装流程&#xff0c;在我们自动化设备的情况下&#xff0c;最后实现自动化工具 一小盒2袋&#xff0c;一大盒3小盒&#xff0c;一大盒6袋

地理信息系统(GIS)在智慧城市中的40个应用场景案例

在智慧城市发展进程中&#xff0c;地理信息系统&#xff08;GIS&#xff09;作为关键技术之一&#xff0c;正扮演着不可或缺的角色&#xff0c;堪称智慧城市的神经中枢。通过空间数据分析优化城市管理&#xff0c;GIS技术为智慧城市的构建提供了强大的支持。 本文分享了GIS在智…

【蓝桥杯】每日练习 Day11 逆序对问题和多路归并

目录 前言 超快速排序 分析 代码 小朋友排队 分析 代码 鱼塘钓鱼 分析 代码 前言 本来计划今天写五道题的&#xff0c;结果计划赶不上变化&#xff0c;谁能告诉我我的时间都去哪了。。。 今天给大家带来三道题目&#xff0c;两道逆序对问题&#xff0c;分别用归并排…

酷淘商场项目【从零到一详解】Web端

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

Gemini 2.0 Flash 图片去水印测试

Gemini 2.0 Flash 模型不仅会生成包含名人和受版权保护角色的图像&#xff0c;还会去除现有照片中的水印。 据 X 和 Reddit 上的多位用户指出&#xff0c;Gemini 2.0 Flash 模型不仅会去除水印&#xff0c;还会尝试填补因水印删除而产生的空白区域。其他基于人工智能的工具也能…

STM32学习笔记之keil使用记录

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

MQTT消息服务器新玩法:EMQX结合内网穿透的实战配置指南

文章目录 前言1. 查看EMQX本地WS端口2. Linux安装Cpolar工具3. 配置WS公网连接地址4. WS公网地址连接测试5. 配置WSS公网连接地址6. WSS公网地址连接测试 前言 随着物联网技术的不断发展&#xff0c;MQTT作为一种轻量级的消息发布/订阅协议&#xff0c;在物联网通信中扮演着越…

编程题记录3

九宫幻方 题目链接&#xff1a;https://www.lanqiao.cn/problems/100/learning/?page1&first_category_id1&second_category_id3&tags%E7%9C%81%E8%B5%9B&tag_relationintersection 先旋转、镜像得到所有的情况&#xff0c;可以发现情况是可以暴力得出的。…

电机控制常见面试问题(十八)

文章目录 一.电机控制高级拓扑结构1.LLC 二.谈谈电压器饱和后果三.电压器绕组连接方式的影响四.有源逆变的条件 一.电机控制高级拓扑结构 1.LLC LLC是什么&#xff1f;—— 一个会"变魔术"的电源盒子 想象你有一个魔法盒子&#xff0c;能把电池的电压变大或变小&…

C#设计模式快速回顾

知识点来源&#xff1a;人间自有韬哥在&#xff0c;豆包 目录 一、七大原则1. 单一职责原则 (Single Responsibility Principle)2. 开放封闭原则 (Open-Closed Principle)3. 里氏替换原则 (Liskov Substitution Principle)4. 接口隔离原则 (Interface Segregation Principle)5…