Python相关环境变量配置和模拟手机app登录
【java环境变量配置】
接着,打开系统->高级系统设置->环境变量。新建一个JAVA_HOME
C:\Program Files\Java\jdk1.8.0_201(这里是你的安装路径,最好复制粘贴)
然后在Path下添加
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
然后打开cmd,输入javac,若出现以下信息,则证明你成功了一半。
输入java,若出现以下信息,则证明java环境变量配置成功了。
接下来我们开始测试。在F盘新建一个java文件。我的是debug.java。
然后,切换到F盘。分别执行
-
javac debug.java
-
java debug
然后成功输出10.java环境检验成功。
【appium配置】
一、Appium安装:
1)安装Python
2)安装java(运行appium server需要)
3) 安装appium-client: pip install Appium-Python-Client
4) 安装appium –desktop:
官网下载appium-desktop地址为:Release v1.15.1 · appium/appium-desktop · GitHub
安装成功后桌面会有一个紫色的图标,打开Appium,配置默认点击“start server”启动appium-desktop。
5) 安装Andorid SDK:
下载地址:https://www.androiddevtools.cn/,网页下拉到底部的SDK Tools位置处,选择对应系统版本即可。
下载完成后解压,cmd窗口进入tools\bin目录,输入命令行执行安装组件:sdkmanager "platfrom-tools" "platforms;android-28" "build-tools;28.0.3"
安装过程中,会弹出提示框Accept?(y/N) 一直yes即可。
二、Andorid SDK设置环境变量:
1)去电脑系统属性--环境变量--系统变量里 创建ANDROID_HOME 值设置为SDK根目录的路径;
2)将sdk\plafrom-tools\加入到环境变量path中;
3)验证是否设置成功:运行cmd打开命令提示窗,输入where adb 能够显示出其所在路径即OK;
4)查看Android_home的环境变量是否正确,可以在tools/bin目录下输入echo %android_home% 能够显示出android sdk安装路径即OK;
遇到问题
- 将Android studio与夜神模拟器连接,在夜神模拟器的bin路径下,
adb devices
,此时遇到当前夜神模拟器的adb版本与android 的SDK版本不一致的错误,
解决办法
- 把AndroidSDK\platform-tools下的adb.exe赋值到桌面上,重命名为nox_adb.exe
- 把夜神模拟器下的nox_adb.exe修改为nox_adb_old.exe
- 把桌面上的nox_adb.exe拷贝到夜神模拟器下bin路径下
- 重启夜神模拟器
【问题】
在Android 真机上无法运行Appium inspector?Failed to create session
Appium连接真机启动步骤 (Appium版本为1.22.2)
1、 打开Appium desktop,找到已安装的Appium,名字为Appium Server GUI
打开后启动服务器
by the way:修改Appium菜单显示为中文的位置在这儿
View -》Languages -》zh-CN
2、 手机通过USB连接电脑,并开启开发者调试模式
3、 命令行下输入:adb devices 检查手机连接是否成功
出现有设备信息即代表连接成功,如下:
4、 打开Appium Inspector并配置常规参数,如下:
1、 远程路径:/wd/hub
2、 配置的参数为:
{
"platformName": "Android", //平台
"appium:platformVersion": "12", //android系统版本
"appium:deviceName": "测试机", //设备名称随便写
"appium:automationName": "UiAutomator2" //使用的自动化工具
}
这样按照网上的教程已配置好了,点击“启动会话”
啊噢。。。。。报错了
错误信息:
Failed to create session. An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: 'Command 'D:\\androidSDK\\platform-tools\\adb.exe -P 5037 -s f30a1e7b shell 'settings delete global hidden_api_policy_pre_p_apps;settings delete global hidden_api_policy_p_apps;settings delete global hidden_api_policy'' exited with code 255'; Command output: Exception occurred while executing 'delete': java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS at com.android.providers.settings.SettingsProvider.enforceWritePermission(SettingsProvider.java:2663) at com.android.providers.settings.SettingsProvider.mutateGlobalSetting(SettingsProvider.java:1635) at com.android.providers.settings.SettingsProvider.mutateGlobalSetting(SettingsProvider.java:1627) at com.android.providers.settings.SettingsProvider.deleteGlobalSetting(SettingsProvider.java:1598) at com.android.providers.settings.SettingsProvider.call(SettingsProvider.java:664) at android.content.ContentProvider.call(ContentProvider.java:2473) at android.content.ContentProvider$Transport.call(ContentProvider.java:521) at com.android.providers.settings.SettingsService$MyShellCommand.deleteForUser(SettingsService.java:408) at com.android.providers.settings.SettingsService$MyShellCommand.onCommand(SettingsService.java:282) at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97) at android.os.ShellCommand.exec(ShellCommand.java:38) at com.android.providers.settings.SettingsService.onShellCommand(SettingsService.java:50) at
问题解决方法:
第一步:
配置参数中添加参数 "appium:ignoreHiddenApiPolicyError": true
点击“启动会话”,此时手机上会自动安装“Appium Settings”,需要手动去点击同意完成安装
此时我仍遇到了报错,经过查找一番,还漏掉了最重要的一步
第二步:
手机“设置”中搜索“禁止权限监控”,并打开它(设置->系统设置->开发者选项->禁止权限监控)
打开后再次点击“启动会话”,手机上的画面显示到了Appium inspector中即连接成功了
【模拟夜神浏览器】】
1、
测试
先打开夜神模拟器,然后cmd进入到安装路径的bin目录下,分别执行如下命令:adb.exe connect 127.0.0.1:62001
(用来链接模拟器,62001为夜神模拟器监听端口号,如果是其他模拟器,修改为其对应的监听端口号即可[常用Android模拟器的默认监听端口(转载)])adb devices
(用来显示已连接的设备)
如果显示如下,则配置成功:
直接使用Appium操控模拟器
前提
使用Appium时,需要用到两个参数: appPackge
与appActivity
。appPackage
是启动APP Package名称,也就是需要操控的App名称。 appActivity
是启动Activity名称,也就是启动App后的第一个界面。
以下是获取这两个值的方法: (以操控bilibli为例):
打开模拟器,然后打开bilibili,保持当前的运行界面(bilibili在最前面):
然后cmd输出命令:adb shell dumpsys activity recents | find "intent={"
输出如下:
C:\Users\xupeng>adb shell dumpsys activity recents | find "intent={"intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=tv.danmaku.bili/.ui.splash.SplashActivity}intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.vphone.launcher/.launcher3.Launcher}intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10800100 cmp=com.android.settings/.FallbackHome}C:\Users\xupeng>
输出信息第一条就是屏幕最前面App(也就是bilibili)的信息,需要的是其中字段cmp
的值:tv.danmaku.bili/.ui.splash.SplashActivity
,/前的tv.danmaku.bili
就是appPackge
的值,/后的.ui.splash.SplashActivity
就是appActivity
的值。
步骤
1 打开Appium
运行Appium,界面如下:
点击Edit Configurations,配置JAVA_HOME
与ANDROID_HOME
。
由于在安装JDK
和Android Studio
时已经设置了JAVA_HOME
E和ANDROID_HOME
,它就直接能够取到相应的值。
2 点击Start Server按钮,启动监听
无需修改Host与Port,,点击Start Server,进入如下界面:
最后一行输出表示Appium启动成功并在端口4273进行监听。
3 点击Start Inspector Session按钮,配置相关信息
点击右上角最左边的Start Inspector Session,进入如下界面,然后在Automatic Server页面下输入相关参数:
其中,platformName
为Android(因为是Android模拟器),platformVersion
为7.1.2(在模拟器的设置中的关于平板电脑中可以看到Android版本),deviceName
为127.0.0.1:62001是模拟器的Ip地址+端口(前面已经介绍)。
4 点击Start Session按钮,操控模拟器
最后,点击Start Session按钮,Appium就开始操控模拟器打开bilibili,过程中会在模拟器中安装名为Appium Settings的App,当然这只会在不存在Appium Settings才会安装,接着就是等待过程,最后的呈现效果如下:
同时模拟器中也就呈现出相同的界面:
2、
这没什么好说的。只需注意安装路径,一路下一步即可。
安装后,进行以下简单修改:
-
打开安装目录,进入bin目录(例如:D:\Nox\bin)
-
在第3节安装的Android SDK中添加ADB的exe文件(例如我在D:\Android\SDK\platform tools目录下)复制到这个目录下,覆盖已有的ADB的exe文件
-
删除目录_adb.exe文件的NOx,然后复制一份ADB Exe并重命名为nox_adb.exe
-
启动模拟器
-
从这个目录打开控制台,执行nox_adb.exe connect 127.0.0.1:62001,然后执行adb devices。看到以下信息表示成功
在模拟器中安装测试 apk 文件。这里以计算器为例,直接将apk文件拖入模拟器
! zoz100077](https://programming.vip/images/doc/2673e577cdd3d75dfb5d4f986b75b95a.jpg)
继续进入AAPT dump bake D:\apk\com。在刚才的控制台窗口中有道。计算器-2.0.0。 APK
其中D:\apk\com 有道。计算器-2.0.0。 Apk 是测试 APK 的完整路径。
可以看到安装包的信息已经打印出来了。把两个名字记在红框里,以后写测试脚本的时候用。
注意如果模拟器重启,需要在步骤5_adb中执行NOx。 exe连接127.0.0.1:62001 七。编写测试脚本并生成测试报告
1\。创建测试用例目录testcase,并在该目录下创建测试_app。 py文件
进口时间
导入单元测试
从 appium 导入 webdriver
类 MyTests(unittest.TestCase):
测试前要执行的方法
定义设置(自我):
所需_caps u003d {'platformName': 'Android', # 平台名称
'platformVersion': '4.4.2', #系统版本号
'deviceName': '127.0.0.1:62001', # 设备名称。如果是真机,在“设置->关于手机->设备名称”中查看
'appPackage': 'com.youdao.calculator', # apk的包名
'appActivity': 'com.youdao.calculator.activities.MainActivity' # 活动名称
}
self.driver u003d webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 连接 Appium
self.driver.implicitly_wait(8)
def test_calculator(self, tu003d500, nu003d4):
"""计算器测试"""
时间.sleep(3)
窗口 u003d self.driver.get_window_size()
x0 u003d window['width'] * 0.8 # 起始x坐标
x1 u003d window['width'] * 0.2 #结束x坐标
y u003d window['height'] * 0.5 # y坐标
对于范围内的 i (n):
self.driver.swipe(x0, y, x1, y, t)
时间.sleep(1)
self.driver.find\element\by\id('com.youdao.calculator:id/guide\button').click()
对于范围内的 i (6):
self.driver.find_element_by_accessibility_id('Mathbot Editor').click()
时间.sleep(1)
btn_xpath u003d '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.support.v4 .widget.DrawerLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.LinearLayout[3] /android.view.View/android.widget.GridView/android.widget.FrameLayout[{0}]/android.widget.FrameLayout'
self.driver.find_element_by_xpath(btn_xpath.format(7)).click()
self.driver.find_element_by_xpath(btn_xpath.format(10)).click()
self.driver.find_element_by_xpath(btn_xpath.format(8)).click()
时间.sleep(3)
测试后执行的方法
def 拆解(自我):
self.driver.quit()
2\。创建运行 Py 文件
导入我们
进口时间
导入单元测试
从 HTMLTestRunner 导入 HTMLTestRunner
测试_dir u003d './testcase'
发现 u003d unittest.defaultTestLoader.discover(start_diru003d'./testcase', patternu003d"test*.py")
如果 __name__ u003du003d "__main__":
报告_dir u003d './test_report'
os.makedirs(report_dir, 存在_oku003dTrue)
现在 u003d time.strftime("%Y-%m-%d %H-%M-%S")
报告_name u003d '{0}/{1}.html'.format(报告_dir,现在)
使用 open(report_name, 'wb') as f:
runner u003d HTMLTestRunner(streamu003df, titleu003d"测试报告", descriptionu003d"此测试报告包含超级计算机的简单测试")
runner.run(发现)
HTMLTestRunner是用来导出测试报告的,但是Python 3好像有问题,我在网上找了两个修改的支持Python 3的,
如有需要,您可以在本文末尾的示例项目中下载。
3\。运行 py 文件
程序运行后会在test_report目录下生成测试报告
在浏览器中打开就可以看到报表的内容,一个例子
而已。这一切都完成了。如果有空,可以添加Appium的使用,比如元素定位。希望这篇文章能够对自动化测试的初学者有所帮助。
项目示例下载地址 https://github.com/lixk/apptest
艾玛,我太啰嗦了。现在已经八点了,我还没有吃晚饭。我太饿了。今天我先到这里。
2019 年 5 月 21 日补充
如果配置与上述步骤一致,则没有问题。结果,它无法正常运行。那么问题可能出在模拟器配置中。下面添加了我这边的模拟器配置。
! swz 100101 swz 100102 swz 100100
代码中的'platform version':'4.4.2'是上图中的Android版本。
5【】.调试】
打开夜神模拟器,cmd输入:adb devices,显示夜夜神模拟器的端口号信息。
C:\Users\Administrator>adb devices
List of devices attached
127.0.0.1:62001 device
夜深模拟器中打开浏览器,cmd输入:adb shell。进入adb shell后输入:dumpsys activity | grep mFocusedActivity
C:\Users\Administrator>adb shell
x1q:/ # dumpsys activity | grep mFocusedActivity
mFocusedActivity: ActivityRecord{ab87ba5 u0 com.android.browser/.BrowserActivity t7}
x1q:/ #
APP包名: com.android.browser
APP进程名:.BrowserActivity
打开Appium Server GUI,点击startServer后点击放大镜,下载元素查看器。下载地址:https://github.com/appium/appium-inspector/releases
安装成功后,appium inspector的Remote Host和appnium server 的Host设置为:127.0.0.1,Remote Path:/wd/hub,设置Desired Capabilities,如下图。点击startSession后连接并自动操作夜深模拟器。至此,调试成功。
注意:安卓模拟器在网络桥接模式下无法使用appium连接。
{
"appium:platformName": "Android", #平台名称
"appium:platformVersion": "7.1.2", #版本信息
"appium:deviceName": "SM-G9810", #设备型号
"appium:appPackage": "com.android.browser", #App包名
"appium:appActivity": ".BrowserActivity" #App进程名
}
【错误总结】
1、cmd中adb devives报错,退出各个可能占用的软件,并调试
2、报错不能verify,更新jdk版本,或者下载jar包
【记录】
aapt dump badging C:\Users\Administrator\Desktop\wycjjsq.apk
com.youdao.calculator
com.youdao.calculator.activities.MainActivity
adb shell dumpsys activity recents | find "intent={"
C:\Users\xupeng>adb shell dumpsys activity recents | find "intent={"intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000
cmp=tv.danmaku.bili/.ui.splash.SplashActivity}intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100
cmp=com.vphone.launcher/.launcher3.Launcher}intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10800100 cmp=com.android.settings/.FallbackHome}C:
\Users\xupeng>
{
"platformName": "Android",
"appium:platformVersion": "9",
"appium:deviceName": "HJSGK19C18000009",
"ignoreHiddenApiPolicyError": true
}
【夜游神】模拟器连接
{
"platformName": "Android",
"appium:platformVersion": "7",
"appium:deviceName": "127.0.0.1:62001",
"appium:ignoreHiddenApiPolicyError": true
}
模拟登录手机app界面
{"platformName": "Android","appium:deviceName": "HWEVA","appium:appPackage": "com.tencent.mm","appium:appActivity": ".ui.LauncherUI" }
获取安装包和activity
aapt dump badging C:\Users\Administrator\Desktop\360浏览器.apkcom.qihoo.browser.launcher.LauncherActivity com.qihoo.browsernetstat -aon|findstr "5037"
③在电脑上 dos命令窗口,输入命令
adb shell dumpsys window w | findstr \/ | findstr name=
或 adb shell dumpsys window |findstr mCurrent
或 adb shell "dumpsys window w|grep \/|grep name=|sed 's/mSurface=Surface(name=//g'|sed 's/)//g'|sed 's/ //g'"
各命令执行后截图如下:(红色选框中分别为包名和activity)
【配置fiddler报错】
cmd中运行
makecert.exe -r -ss my -n "CN=DO_NOT_TRUST_FiddlerRoot, O=DO_NOT_TRUST, OU=Created by http://www.fiddler2.com" -sky signature -eku 1.3.6.1.5.5.7.3.1 -h 1 -cy authority -a sha1 -m 120 -b 09/11/2099
设置代理后无法上网【】
一、手机代理要设置正确
手机连接电脑开出的WiFi
长按手机的WiFi按钮,选择刚刚连接的WiFi,然后进行代理设置(不同型号的手机找到设置界面的方法稍有不同,请进行对应的搜索)
电脑打开cmd,输入ipconfig,找到对应的(无线局域网)ipv4,这就是要输入的代理主机名。以下是我电脑上的截图
输入端口号,默认8888;如果改了,填入改了后的端口号
二、修改注册表
打开注册表(cmd输入regedit等方法都行),找到计算机\HKEY_CURRENT_USER\Software\Microsoft\Fiddler2这一项
右键新建QWORD,输入80
结果如图所示
三、修改Fiddler Rules
打开Fidder Classic,按下Ctrl R组合键,出现如下Fiddler ScriptEditor
2. 按下Ctrl F组合键,输入OnBeforeRequest,按下enter后,输入
if (oSession.host.toLowerCase() == "webserver:8888")
{
oSession.host = "webserver:80";
}
1
2
3
4
按下Ctrl S组合键保存
结果如图所示
四、重新启动Fiddler
完成以上三步后,重启fiddler,重新抓包。
————————————————
版权声明:本文为CSDN博主「MrX_OvO」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/MrRookieX/article/details/126768829
【设置手机代理】
一、概述
简介
Fiddler是位于客户端和服务器端之间的代理,也是目前最常用的抓包工具之一 。它能够记录客户端和服务器之间的所有 请求,可以针对特定的请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是web调试的利器。
看到这么多的应用,是不是就迫不及待的想要开始你的抓包之旅呢,不要急,俗话说的好:工欲善其事,必先利其器,我们先来安装Fiddler吧。
下载
打开官网,官网下载地址是Download Fiddler Web Debugging Tool for Free by Telerik
打开以后选择你的相关信息如下图:
说明:
第一个选择:Mobile application development/debugging,表示移动应用开发/调试
第二个,输入你的邮箱
第三个,选择China
最后点击Download for Window,就会下载一个exe程序。
安装过程就不多了,直接一路下一步即可。
二、配置
打开软件后,效果如下:
安装证书
由于默认无法解析https请求,因此需要安装证书才行。
在工具栏找到Tools,然后依次选择Options、HTTPS ,然后勾选Decrypt HTTPS traffic选项,勾选后安装证书。
点击yes
选择是
点击是
提示安装完成
连接信息
配置连接信息:Tools > Options >Connections
- 端口默认是8888,你可以进行修改。
- 勾选Allow remote computers to connect选项,然后重启Fiddler,再次打开时会弹出一个信息,选择ok即可。
三、浏览器测试
打开ie浏览器,点击internet选项-->连接-->局域网设置
设置代理,端口为8888
设置好之后,打开百度首页,就可以看到很多信息了。
四、手机测试
但是如果你想要对手机上的app进行抓包怎么办呢,那么你还需要进行以下操作:
首先你的Fiddler所在的电脑和手机必须处在同一个局域网内(即连着同一个路由器)。
查看你的本机IP地址,在Fiddler的右上角有一个Online按钮,点击一下会显示你的IP信息
因为我本机有很多网卡,其中:192.168.31.145,就是无线网卡ip。
打开你的手机,找到你所连接的WIFI,长按选择修改网络,输入密码后往下拖动,然后勾选显示高级选项,然后在代理一栏选择手动,再将你先前查看的IP地址和端口号输入进去,然后保存。
最后安装手机证书,在手机浏览器一栏输入电脑的IP地址和端口号
这里我是192.168.31.145:8888
下载完成后,安装证书
安装完成后,打开今日头条,就可以看到很多数据了。
注意:对于抖音,如果wifi设置了Fiddler代理,打开抖音时,提示网络不可连接。当你wifi设置关闭代理后,再次打开抖音,就可以了。
相关文章:

Python相关环境变量配置和模拟手机app登录
【java环境变量配置】 接着,打开系统->高级系统设置->环境变量。新建一个JAVA_HOME C:\Program Files\Java\jdk1.8.0_201(这里是你的安装路径,最好复制粘贴) 然后在Path下添加 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 然后…...

c++ 11标准模板(STL) std::map(九)
定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…...
深入探索chatGPT插件:SceneXplain,Wolfram,和AppyPieAIAppBuilder
1. 引言 在这个日益依赖技术的世界中,AI插件已经成为了我们日常生活和工作的重要组成部分。在这篇博客中,我们将深入探索三个强大的AI插件:SceneXplain,Wolfram,和AppyPieAIAppBuilder,了解他们的功能&…...

华为OD机试真题B卷 Java 实现【停车场车辆统计】,附详细解题思路
一、题目描述 特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。 车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位&a…...

第二章:MySQL环境搭建
第二章:MySQL环境搭建 2.1:MySQL的下载、安装、配置 MySQL的四大版本 MySQL Community Server社区版本:开源免费、自由下载,但不提供官方技术支持,适用于大多数普通用户。MySQL Enterprise Edition企业版本࿱…...
生产环境之负载均衡LVS+keepalived方案(2)_LVS介绍
LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,linux内核2.6.X之后的版本默认已集成了LVS模块(内核模块名为:ipvs),实现了基于传输层的请求负载均衡调度方案,LVS支持的工作模…...
【parsel】------- PYTHON爬虫基础4
parsel 这个库可以对 HTML 和 XML 进行解析,并支持使用 XPath 和 CSS Selector 对内容进行提取和修改,同时它还融合了正则表达式提取的功能。 内容目录 from parsel import Selector提取节点提取 class 包含 item-0 的节点 提取文本获取提取到的所有 li…...

MySQL数据库从入门到精通学习第8天(表数据的查询)
表数据的查询 基本查询语句单表查询聚合函数查询多表连接查询子查询合并查询结果定义表和字段的别名使用正则表达式查询 基本查询语句 SELECT 语句非常的强大,是最常用的查询语句。他具有一个固定的格式,如下: SELECT 查询的内容 FROM 数据…...

什么是IPAM?如何使用IPAM来管理IP地址和DHCP?
在计算机网络中,IPAM(IP Address Management)是一种用于管理IP地址和DHCP(Dynamic Host Configuration Protocol)的工具或系统。IPAM旨在简化和集中管理IP地址分配、子网划分和DHCP配置等任务。本文将详细介绍IPAM的概…...

PCIE学习
目录 一、PCIE结构1、层次结构2、数据包TLPDLLP PCIE寄存器配置1、基址寄存器的作用2、基址寄存器的位置 三、PCIE读取数据 一、PCIE结构 1、层次结构 绝大多数的总线或者接口,都是采用分层实现的。PCIe也不例外,它的层次结构如下: PCIe定…...

商业智力,Social焕新|数说故事重磅发布“SocialGPT”,国内首个专注Social领域的商业大模型
AGI时代的到来,市场风云变幻,世界正在经历着一场技术革命的颠覆性洗礼。 2023年6月6日6时,数说故事正式对外发布数说故事“SocialGPT”,国内首个专注Social领域的商业大模型。数说故事“SocialGPT”大家昵称它为“社牛”大模型&a…...

STM32HAL库RS485-ModBus协议控制伺服电机
STM32HAL库RS485-ModBus协议控制伺服电机 一个月前,接手了一个学长的毕设小车,小车采用rs485通信的modbus协议驱动轮毂电机,与往常我学习的pwm控制电机方法大相径庭,在这里以这篇博客记录下该学习过程。 小车主要架构 电机型号 …...

【医学图像】图像分割系列.3 (uncertainty)
介绍几篇使用不确定性引导的医学图像分割论文:UA-MT(MICCAI2019),SSL4MIS(MICCAI2021),UG-MCL(AIIM2022). Uncertainty-aware Self-ensembling Model for Semi-supervise…...
Java有线程安全的set吗?
在Java中,有线程安全的Set实现。一个常用的线程安全的Set实现是ConcurrentSkipListSet。ConcurrentSkipListSet是一个有序的集合,基于跳表(SkipList)的数据结构实现。它提供了线程安全的操作,并且具有较好的性能。 接下来笔者用一段简单的Jav…...

《HelloGitHub》第 86 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 …...

LDGRB-01 3BSE013177R1 将数字输入和继电器输出结合
LDGRB-01 3BSE013177R1包的一部分是全面的通信选项,包括Modbus主/从或CS31,这种产品很少提供。128kB的用户内存和0.1秒/指令的程序处理时间只是AC500-eCo令人印象深刻的性能的两个例子。除了与现有AC500系列的互操作性,AC500-eCo系统还使用基…...

手动计算校正年龄、性别后的标准化死亡率 (SMR)
分析队列人群有无死亡人数超额,通常应用标准人群死亡率来校正,即刻观察到中的实际死亡数(D)与定一个标准的死亡人数(E),D与E之比称为死亡比(standarized Mortality ratio,…...

Java组合模式:构建多层次公司组织架构
在现实生活中,常常会遇到用树形结构组织的一些场景,比如国家省市,学校班级,文件目录,分级导航菜单,以及典型的公司组织架构,整个层次结构自顶向下呈现一颗倒置的树。这种树形结构在面向对象的世…...

Langchain-ChatGLM:基于本地知识库问答
文章目录 ChatGLM与Langchain简介ChatGLM-6B简介ChatGLM-6B是什么ChatGLM-6B具备的能力ChatGLM-6B具备的应用 Langchain简介Langchain是什么Langchain的核心模块Langchain的应用场景 ChatGLM与Langchain项目介绍知识库问答实现步骤ChatGLM与Langchain项目特点 项目主体结构项目…...
设计模式十 适配器模式
适配器模式 适配器模式是一种结构型设计模式。作用:当接口无法和类匹配到一起工作时,通过适配器将接口变换成可以和类匹配到一起的接口。(注:适配器模式主要解决接口兼容性问题) 适配器的优点与缺点: 优…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...

对象回调初步研究
_OBJECT_TYPE结构分析 在介绍什么是对象回调前,首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例,用_OBJECT_TYPE这个结构来解析它,0x80处就是今天要介绍的回调链表,但是先不着急,先把目光…...

循环语句之while
While语句包括一个循环条件和一段代码块,只要条件为真,就不断 循环执行代码块。 1 2 3 while (条件) { 语句 ; } var i 0; while (i < 100) {console.log(i 当前为: i); i i 1; } 下面的例子是一个无限循环,因…...