天道酬勤,学无止境

运行脚本时排除 URL(exclude URLs when running a script)

问题

我正在使用 Firefox、iMacros 和 js。

我有一个带有 URL 列表的URLs.txt文件。 在 Firefox 中,我在选项卡 1 中打开了一个网页。该网站包含许多 URL。 其中一些在我的文本文件中。 我正在尝试创建一个简单的脚本,它将跳过我的文本文件中的 URL,并在下一个选项卡中打开其他 URL。 一次10个。 因此,应使用不在我的文本文件中的新 URL 打开 Tab 2-11。 这是我的 JavaScript,但它不起作用:

var macro;
var ret;

macro ="CODE:";
macro +="SET !DATASOURCE URLs.txt"+"\n"
macro +="SET !ERRORIGNORE YES"+"\n";
macro +="TAG POS=1 TYPE=HTML ATTR=* EXTRACT=HTM"+"\n";
macro +="SET !DATASOURCE_LINE {{!LOOP}}"+"\n";

iimPlay(macro)
var text=iimGetExtract();

 if(text.search("00016")!=-1)   {
 ret = iimPlay("donothing.iim");
   }

    else if (ret != -101) {
     ret = iimPlay("openURL.iim");
 }

openURL.iim 只是打开带有 URL 的选项卡,但在此脚本中,它永远不会跳过我列表中的那些 URL。 我需要帮助来修复此代码。

这是 openURL.iim 的样子(对于前 4 个选项卡):

VERSION BUILD=9030808 RECORDER=FX
TAB T=1
EVENT TYPE=CLICK SELECTOR="HTML>BODY>UL:nth-of-type(2)>LI>A" BUTTON=0 MODIFIERS="ctrl"
EVENT TYPE=CLICK SELECTOR="HTML>BODY>UL:nth-of-type(2)>LI:nth-of-type(2)>A" BUTTON=0 MODIFIERS="ctrl"
EVENT TYPE=CLICK SELECTOR="HTML>BODY>UL:nth-of-type(2)>LI:nth-of-type(3)>A" BUTTON=0 MODIFIERS="ctrl"
EVENT TYPE=CLICK SELECTOR="HTML>BODY>UL:nth-of-type(2)>LI:nth-of-type(4)>A" BUTTON=0 MODIFIERS="ctrl"
EVENT TYPE=CLICK SELECTOR="HTML>BODY>UL:nth-of-type(2)>LI:nth-of-type(5)>A" BUTTON=0 MODIFIERS="ctrl"
....
回答1

我可以给你一个线索。 让我们用 URL 列表制作你的 txt 文件,如下所示:

"http://www.example1.com
http://www.example2.com
http://www.example3.com"

请注意只有两个双引号:在此列表的开头和结尾。
所以你的脚本可能看起来像:

iimPlayCode (
    "SET !DATASOURCE URLs.txt" + "\n" +
    "SET !EXTRACT {{!COL1}}"
);
var excLinks = iimGetExtract().split(/\s+/);

var incLinks = [];
for (i = 1; i <= window.document.querySelectorAll("HTML>BODY>UL:nth-of-type(2)>LI").length; i++)
    if (excLinks.indexOf(window.document.querySelector("HTML>BODY>UL:nth-of-type(2)>LI:nth-of-type(" + i + ")>A").href) == -1)
        incLinks.push(i);

for (i = 0; i < Math.min(incLinks.length, 10); i++)
    iimPlayCode('EVENT TYPE=CLICK SELECTOR="HTML>BODY>UL:nth-of-type(2)>LI:nth-of-type(' + incLinks[i] + ')>A" BUTTON=0 MODIFIERS="ctrl"');

我会在目标网站上为您测试此代码。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 匹配除 Chrome 扩展程序中某些 URL 之外的所有 URL(Match all URLs except certain URLs in Chrome Extension)
    问题 我正在尝试使用它,以便我的内容脚本可以在除 3 之外的每个站点上运行。我知道可能有一种使用正则表达式的方法,但我不想这样做。 chrome 扩展清单是否允许例外? 如果正则表达式是唯一的解决方案,并且任何人都知道排除这 3 个 URL 的模式,那也很棒。 https://www.linkedin.com/ https://mail.google.com/ https://twitter.com/ 回答1 https://developer.chrome.com/extensions/content_scripts 列出了一个选项exclude_matches : "content_scripts": [ { "matches": ["<all_urls>"], "js": ["myscript.js"], "exclude_matches": [ "https://www.linkedin.com/", "https://mail.google.com/", "https://twitter.com/" ] } ] 我猜你会想要一个*结尾: "https://twitter.com/*"等,以排除这些域上所有页面上的脚本,而不仅仅是主页。 您还可以查看 exclude_globs 选项。 回答2 好吧,在这种情况下,正则表达式非常简单: (www\.linkedin\.com
  • 每个页面加载只运行一次 Greasemonkey 脚本?(Run a Greasemonkey script only once per page load?)
    问题 如果您使用@include *创建一个 Greasemonkey 脚本并访问 youtube 等网站,则每次刷新时它都会运行该脚本 20 多次。 这是在 Firefox 上,不确定 Chrome。 有没有办法防止这种情况? 回答1 首先,您可能不希望脚本在 iFrame 中运行。 您可以使用 @noframes 指令阻止它,该指令现在在 2014 年 10 月同时适用于 Greasemonkey 和 Tampermonkey。 对于旧版本或不支持@noframes脚本引擎,您可以在元数据块之后使用此代码: if (window.top != window.self) //don't run on frames or iframes { //Optional: GM_log ('In frame'); return; } 其次,您可以在页面加载时等待并触发您的 GM 代码一次。 将所有内容包装在main()并在load事件上调用它,如下所示: window.addEventListener ("load", LocalMain, false); function LocalMain () { // Your code goes here. } 第三,您可以通过向元数据块添加// @exclude指令来排除站点或页面。 总的来说,如果可能的话,最好避免普遍包含的 GM 脚本。
  • 运行 mocha 排除路径(Run mocha excluding paths)
    问题 我有这个(在 gulpfile.js 中): var gulp = require("gulp"); var mocha = require("gulp-mocha"); gulp.task("test", function() { gulp .src(["./**/*_test.js", "!./node_modules/**/*.js"]); }); 它有效。 我想从 mocha 命令复制相同的行为,不包括“node_modules”文件夹,运行npm test (在 package.json 中): "scripts": { "test": "mocha **\\*_test.js !./node_modules/**/*.js*", } 它不起作用。 我正在使用 Windows。 有什么建议吗? 回答1 我能够在参数来解决这个使用匹配模式, mocha 。 像您一样,我不想将所有测试放在一个tests文件夹下。 我希望它们与他们正在测试的类位于同一目录中。 我的文件结构如下所示: project |- lib |- class1.js |- class1.test.js |- node_modules |- lots of stuff... 从project文件夹运行它对我有用: mocha './{,!(node_modules)/**}/*.test.js'
  • 我可以从 Google Apps 脚本的撤消堆栈中排除操作吗?(Can I exclude operations from the undo stack in Google Apps Script?)
    问题 我有一个功能,可以从一张纸中读取笔记,并在进行编辑时将它们写入另一张纸的单元格中。 但是,每当我这样做时,它都会将所有这些写入添加到撤消堆栈中。 这意味着无论何时用户进行和编辑,都无法再使用撤消功能,因为撤消堆栈中充满了脚本所做的编辑。 有没有办法从撤消堆栈中排除脚本执行的写入功能? 我明白这可能是不可能的,但如果我不能这样做,我将不得不使用计时器每小时运行一次,这意味着一切都将过时一个小时。 干杯, 麦克风 回答1 可悲的是,脚本执行的操作相当于您自己在单元格中编写一些内容。 编辑堆栈在工作表侧跟踪,编辑由运行脚本的用户进行。 您唯一的希望是以与打开电子表格的用户不同的用户身份运行它,但鉴于onEdit()触发器的性质,这可能是不可能的。 请参阅触发器文档。 我建议这样做的原因是工作表单独跟踪每个用户的编辑。 然而,即使这不是一个完美的解决方案,就像我们都编辑完全相同的单元格一样,我的撤消仍然会改变你的编辑。 例如,如果我将A写入一个空单元格,然后您将B写入同一个单元格,我点击撤消,它将再次成为一个空单元格。
  • 限制Chrome扩展程序访问某些URL?(Limit Chrome Extension to certain URLs?)
    问题 有没有办法将Chrome扩展程序限制为只能在某些网址上运行? 假设我希望扩展仅在域为Amazon.com时运行。 我知道您可以在脚本的顶部放置一个检查,然后仅在检查匹配时才执行脚本的其余部分。 但是,您可以完全阻止扩展程序运行吗? 回答1 很高兴,它表明即使在我停留了一段时间后,我也可以在发布问题后立即找到答案…… 最初在答案中链接的文档版本的存档:http://code.google.com/chrome/extensions/content_scripts.html 清单V2的模拟页面(尽管另请参见V3):https://developer.chrome.com/docs/extensions/mv2/content_scripts/ 在manifest.json中: "content_scripts": [ { "matches": ["http://*.nytimes.com/*"], "exclude_matches": ["*://*/*business*"], "js": ["contentScript.js"] } ], 回答2 作为用户,使用带有chrome:// flags /#extension-active-script-permission(您可能需要启用“用户对扩展脚本的同意”标志)的Chrome 71(甚至可能更早)
  • CentOS系统下同步及架设镜像站点
    架设镜像站点适用于内网及隔离网络,特别是隔离网络中有源和没有源简直是两个感受,在此以CentOS系统为例子,记录本人架设镜像站点的心得。 使用reposync同步 安装同步工具 以前同步使用的是rsync工具再加上createrepo来生成元数据,但现在有更好的办法,CentOS 中使用reposync工具。 # CentOS 7 sudo yum install yum-utils # CentOS 8 sudo dns install dnf-utils 同步默认仓库 安装完成后,就可以立即执行仓库同步。 CentOS 7的默认仓库包含: base updates extras CentOS 8的默认仓库包含: 初次同步 // CentOS 7 sudo reposync --download-metadata -p /home/repos // CentOS 8 sudo dnf reposync --download-metadata --destdir /home/repos 说明: “--download-metadata"下载元数据,否则需要使用createrepo生成。 ”-p"和"--destdir"指定存放目录,默认是命令执行的当前目录。 上述命令会同步当前所有有效的源,可以用命令"yum repolist"查看,或者查看.repo文件中"[]"中的描述
  • 排除几个Urls进行深层链接(Exclude few Urls from deeplinking)
    问题 我可以在清单中的intent-filter中使用以下过滤器来成功实现应用程序的深层链接: <data android:host="myhost.com" android:pathPrefix="/v" android:scheme="http" /> 例如。 我的网址是: http://myhost.com/v/login1.php?id=123&name=abc&type=a http://myhost.com/v/login1.php?id=123&name=abc&type=b 我想排除 http://myhost.com/v/login1.php?id=123&name=abc&type=c 现在,我想排除一些具有相同前缀的Urls。 有可能还是我需要使用android:path明确指定所有网址? 如果是这样,如何处理查询参数的值? 回答1 不幸的是,由于Android不提供该选项,因此我们无法排除任何特定的url。 最佳实践是提供尽可能精确的pathPrefix 。 只指定没有任何路径的主机前缀是可以的,只要应用程序执行的所有操作都有意义即可。 但是,如果有任何链接在应用程序无法处理时应该执行特定的操作,则应该让Web服务正确处理它。 在这种情况下,如果您的Web服务可以完成比应用程序更多的工作,则将所有内容都列入白名单并不是一个好主意。
  • jQuery .load() 但排除脚本标签(jQuery .load() but exclude script tags)
    问题 我正在使用以下 jQuery 将 5 个页面加载到当前页面中 $('.main').load('main.cfm'); $('.bu1').load('bu1.cfm'); $('.bu2').load('bu2.cfm'); $('.bu3').load('bu3.cfm'); $('.bu4').load('bu4.cfm'); 但是每个.cfm都有以下script标签 <script src="js/jquery.speedometer.js"></script> <script src="js/jquery.jqcanvas-modified.js"></script> <script src="js//excanvas-modified.js"></script> <script> $(function(){ $('#MDTQ').speedometer({ backgroundImage: "url(speedo/background-r.png)", maximum: 15, scale: 15, suffix: '' }); $('.changeSpeedometer').click(function(){ $('#MDTQ').speedometer({ percentage: $('.speedometer').val() || 0 }); }); })
  • 是否可以从coverage.py 报告中排除测试目录?(Is it possible exclude test directories from coverage.py reports?)
    问题 我是 Python 单元测试的新手,尤其是coverage.py。 是否希望覆盖率报告包括实际测试文件的覆盖率? 这是我的 HTML 报告的屏幕截图作为示例。 您可以看到报告包含tests/test_credit_card 。 起初我试图从报告中省略tests/目录,如下所示: coverage html --omit=tests/ -d tests/coverage 我尝试了该命令的几种变体,但我一生都无法进行测试/排除。 接受失败后,我开始怀疑测试文件是否应该包含在报告中。 任何人都可以对此有所了解吗? 回答1 coverage html --omit="*/test*" -d tests/coverage 回答2 在项目根文件夹中创建.coveragerc文件,并包含以下内容: [run] omit = *tests* 回答3 如果任何 Django 开发人员需要一个 .coveragerc 用于他的项目,请留在这里。 [run] source = . omit = ./venv/*,*tests*,*apps.py,*manage.py,*__init__.py,*migrations*,*asgi*,*wsgi*,*admin.py,*urls.py [report] omit = ./venv/*,*tests*,*apps.py,*manage.py,*_
  • 如何使用jQuery $ .getScript()方法包含多个js文件(How to include multiple js files using jQuery $.getScript() method)
    问题 我正在尝试将javascript文件动态包含到我的js文件中。 我对此进行了一些研究,发现jQuery $ .getScript()方法是理想的选择。 // jQuery $.getScript('/path/to/imported/script.js', function() { // script is now loaded and executed. // put your dependent JS here. // what if the JS code is dependent on multiple JS files? }); 但是我想知道这种方法是否可以一次加载多个脚本? 我之所以这样问,是因为有时我的javascript文件依赖于多个js文件。 先感谢您。 回答1 答案是 您可以将promises与getScript()结合使用,并等待所有脚本加载getScript() ,例如: $.when( $.getScript( "/mypath/myscript1.js" ), $.getScript( "/mypath/myscript2.js" ), $.getScript( "/mypath/myscript3.js" ), $.Deferred(function( deferred ){ $( deferred.resolve ); }) ).done
  • CentOS 7.7 rsync使用详解,并结合inotify实现文件实时同步
    目录: 相关概念编译安装rsyncrsync简单使用示例rsync + crontab实现文件定时同步,并发送邮件提醒rsync daemon + inotify实现文件实时同步 一、 相关概念 :1、rsync:remote synchronize,一款开源、快速的、可实现全量及增量本地或远程数据同步的软件,下载地址https://rsync.samba.org/。2、rsync特点:(1)传输速度快,首次全量传输,后续会对比文件的不同,只传输文件更新部分,实现增量传输;(2)传输安全性高;(3)支持匿名传输,方便网站镜像;(4)支持传输软链接、设备等特殊文件;(5)支持传输时保留源文件的权限、属主、属组、时间、软硬链接等信息;(6)支持传输时排除指定的目录或文件;(7)支持传输时压缩,使用更少的带宽,提高传输效率。3、rsync工作模式:(1)单个服务器本地目录之间传输数据(类似cp);(2)借助SSH通道传输数据(类似scp);(3)以daemon守护进程方式传输数据(需要/etc/rsyncd.conf配置文件)。4、inotify:一种强大的、异步的文件系统事件监控机制。Linux内核从2.6.13起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况
  • 如何使用 Android 意图过滤器排除 URL?(How to exclude URLs with Android Intent Filters?)
    问题 我看到了一些像这样的意图过滤器。 <data android:scheme="http" android:host="m.facebook.com" android:pathPattern=".*"/> Facebook 应用程序会抛出类似的 URL http://m.facebook.com/l.php?u=http%3A%2F%2Fyoutu.be%2FBsKtRwSyLmM&h=9AQF5nU03&s=1 我想打开那些包含 youtu.be 但不包含用户的网址(因为我想在应用程序中打开视频而不是用户个人资料)。 回答1 我一直在寻找类似的东西,显然您只能过滤实际路径(在本例中为“l.php”)而不是查询字符串(u=http%3A...)。 这是一个类似的问题:intent filter pathPrefix with question mark 还有一个解决方法(仅当您正在寻找对自己页面的引用时才有效):Android 浏览器 Facebook 重定向并不总是触发 URL 的意图
  • DacPac排除用户和登录名(在导出或导入时)(DacPac exclude users and logins on export or import)
    问题 我正在做一些自动化,并且在将大约10-15个古老的古怪脚本重写为一个简单单元的过程中,它可以: 在生产环境中从MsSql2012导出数据库方案在开发环境中将数据库方案导入到MsSql2012 我使用Microsoft.SqlServer.Dac在其中执行此操作,我可以在其中导出/导入dac包。 它工作得很好:),但是在完成所有TDD和测试之后,是时候开始制作真正的东西了,事实证明我完全错过了我们有2个域的工作。 这意味着在开发环境中导入dacpac时会出现错误,这是因为我们的2个域没有完全的2种方式的信任,并且数据库当然有来自这两个域的用户。 特别是生产域用户。 我可以看到3种可行的解决方案: 获得环境之间的完全信任。 但这不会发生,因为我的工作要求很高的安全性。 无需用户即可导入dacpac。 无需用户即可导出到dacpac。 香港专业教育学院阅读文档(当然这是含糊的),试图找到一组可以实现2)或3)的选项。 香港专业教育学院睾丸有很多连击,但没有一个行得通。 dac pac导入会继续尝试创建用户,但由于无法在开发环境中验证生产用户,因此失败。 我正在使用部署和提取来导出/导入。 可以在这里找到不同的选项: 摘录:http://technet.microsoft.com/zh-cn/library/microsoft.sqlserver.dac
  • rsync 是什么?
    一、简介rsync 是一个常用的 Linux 应用程序,用于文件同步。它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代cp和mv命令。它名称里面的r指的是 remote,rsync 其实就是"远程同步"(remote sync)的意思。与其他文件传输工具(如 FTP 或 scp)不同,rsync 的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改时间有变动)。二、安装如果本机或者远程计算机没有安装 rsync,可以用下面的命令安装。Debian$ sudo apt-get install rsyncRed Hat$ sudo yum install rsyncArch Linux$ sudo pacman -S rsync注意,传输的双方都必须安装 rsync。三、基本用法3.1 r 参数本机使用 rsync 命令时,可以作为cp和mv命令的替代方法,将源目录同步到目标目录。$ rsync -r source destination上面命令中,-r表示递归,即包含子目录。注意,-r是必须的,否则 rsync 运行不会成功。source目录表示源目录,destination表示目标目录。如果有多个文件或目录需要同步,可以写成下面这样。$ rsync -r
  • 在 PHP 脚本运行时添加加载图像(Adding loading image while PHP script runs)
    问题 我有一个 PHP 脚本(粘贴在下面),它从 URL 列表中提取元数据,问题是加载可能需要一段时间,用户永远不知道它何时完全完成(除非他们留意加载中的图标他们的浏览器标签) 我已经在网上环顾了很长时间,但找不到解决方案,我读过我可以使用 Ajax,但我究竟如何在这个脚本中使用它? 谢谢您的帮助! <script type="text/javascript"> function showContent(vThis) { // http://www.javascriptjunkie.com // alert(vSibling.className + " " + vDef_Key); vParent = vThis.parentNode; vSibling = vParent.nextSibling; while (vSibling.nodeType==3) { // Fix for Mozilla/FireFox Empty Space becomes a TextNode or Something vSibling = vSibling.nextSibling; }; if(vSibling.style.display == "none") { vThis.src="collapse.gif"; vThis.alt = "Hide Div"; vSibling.style
  • 如何防止浏览器预加载标签?(How do I prevent the browser from preloading the <video> tag?)
    问题 我用 JavaScript 为 Chrome 编写了一个用户脚本扩展,以防止视频和音频标签在页面加载时自动下载 这是代码: var videoTags = document.getElementsByTagName("Video"); var i; for(i=0; i<videoTags.length; i++) { videoTags[i].setAttribute("preload", "none"); videoTags[i].removeAttribute("autoplay"); } var audioTags = document.getElementsByTagName("audio"); var i; for(i=0; i<audioTags.length; i++) { audioTags[i].setAttribute("preload", "none"); audioTags[i].removeAttribute("autoplay"); } 这是 manifest.json 文件: { "content_scripts": [ { "exclude_globs": [ ], "exclude_matches": [ ], "include_globs": [ "*" ], "js": [ "script.js" ], "matches": [
  • linux zip 并通过 bash/shell 脚本排除目录(linux zip and exclude dir via bash/shell script)
    问题 我正在尝试编写一个 bash/shell 脚本来压缩特定文件夹并忽略该文件夹中的某些子目录。 这是我试图压缩“ sync_test5 ”的文件夹: 我的 bash 脚本生成一个忽略列表(基于)并像这样调用 zip 函数: #!/bin/bash SYNC_WEB_ROOT_BASE_DIR="/home/www-data/public_html" SYNC_WEB_ROOT_BACKUP_DIR="sync_test5" SYNC_WEB_ROOT_IGNORE_DIR="dir_to_ignore dir2_to_ignore" ignorelist="" if [ "$SYNC_WEB_ROOT_IGNORE_DIR" != "" ]; then for ignoredir in $SYNC_WEB_ROOT_IGNORE_DIR do ignorelist="$ignorelist $SYNC_WEB_ROOT_BACKUP_DIR/$ignoredir/**\*" done fi FILE="$SYNC_BACKUP_DIR/$DATETIMENOW.website.zip" cd $SYNC_WEB_ROOT_BASE_DIR; zip -r $FILE $SYNC_WEB_ROOT_BACKUP_DIR -x $ignorelist >/dev/null echo
  • 如何在 Linux 中执行文件操作(即 cp、mv、rm 和 chown 等)时排除文件夹(How do I exclude a folder when performing file operations i.e. cp, mv, rm and chown etc. in Linux)
    问题 执行文件操作时如何排除文件夹,即 cp 等。 我目前会使用通配符 * 将文件操作应用于所有文件,但我需要排除一个文件夹。 我实际上想要使用的命令是chown来更改目录中所有文件的所有者,但我需要排除一个子目录。 回答1 如果您正在使用 bash 并通过shopt -s extglob启用 extglob,那么您可以使用!(<pattern>)排除给定的模式。 回答2 find dir_to_start -name dir_to_exclude -prune -o -print0 | xargs -0 chown owner find dir_to_start -not -name "file_to_exclude" -print0 | xargs -0 chown owner 回答3 for file in *; do if [ $file != "file_I_dont_want_to_chown" ] then chown -R Camsoft $file fi done 回答4 结合unix的多个小利器:排除文件夹“foo” % ls -d * | grep -v foo | xargs -d "\n" chown -R Camsoft 回答5 对于这种情况,我建议使用 find。 您可以使用 -not -iwhilename 'PATH' 指定要排除的路径。 然后使用
  • 在内容脚本之前注入javascript变量(Injecting javascript variable before content script)
    问题 使用后台脚本background.js,我需要在将另一个文件inject.js作为内容脚本注入之前,将动态变量作为内容脚本注入。 Inject.js将需要有权访问此变量并在页面上的任何脚本运行之前运行其代码。 我在从inject.js内容脚本访问动态变量时遇到困难。 manifest.json { "name": "Shape Shifter", "version": "1.0", "description": "Anti browser fingerprinting web extension. Generates randomised values for HTTP request headers, javascript property values and javascript method return types.", "manifest_version": 2, "icons": { "32": "icons/person-32.png", "48": "icons/person-48.png" }, "background": { "persistent": true, "scripts": ["js/ua.js", "js/words.js", "js/lib/seedrandom.min.js", "js/random.js", "js
  • 删除切片中的元素(Remove elements in slice)
    问题 我是Golang的新手,我正在尝试根据另一个切片中的元素删除一个切片中的元素。 例如 输入切片: urlList := []string{"test", "abc", "def", "ghi"} 要删除切片的元素: remove := []string{"abc", "test"} 预期的输出切片: urlList := []string{"def", "ghi"} 这就是我尝试过的。 func main() { urlList := []string{"test", "abc", "def", "ghi"} remove := []string{"abc", "test"} loop: for i, url := range urlList { for _, rem := range remove { if url == rem { urlList = append(urlList[:i], urlList[i+1:]...) continue loop } } } for _, v := range urlList { fmt.Println(v) } } 但是它没有按我预期的那样工作。 我不知道我在想什么。 回答1 问题是,当您从原始列表中删除一个元素时,所有后续元素都将移位。 但是range循环不知道您更改了基础切片,并且将照常增加索引,即使在这种情况下也不应该这样做