我正在编写Chrome内容脚本扩展程序,我需要能够定位一个特定元素,遗憾的是,除了其父元素之外,它没有唯一标识符.
我需要定位直接的第一个子元素parentElement.console.log(parentElement)完美地报告两个子元素/节点,但是后续的控制台日志(以childNodes为目标的日志)总是返回一个undefined值,无论我做什么.
到目前为止这是我的代码
(我已经排除了实际名称以避免混淆和额外的,不必要的解释)
function injectCode() {
var parentElement = document.getElementsByClassName("uniqueClassName");
if (parentElement && parentElement.innerHTML != "") {
console.log(parentElement);
console.log(parentElement.firstElementChild);
console.log(parentElement.firstChild);
console.log(parentElement.childNodes);
console.log(parentElement.childNodes[0]);
console.log(parentElement.childNodes[1]);
} else {
setTimeout(injectCode, 250);
}
}
Run Code Online (Sandbox Code Playgroud)
如何选择第一个子元素/节点parentElement?

更新:
parentElement.children[0]也有同样的错误parentElement.childNodes[0].
有没有办法在使用通用JavaScript(而不是框架)的网页上检测全局AJAX调用(特别是响应)?
我已经在StackOverflow上查看了" JavaScript检测AJAX事件 " 的问题,并尝试将接受的答案代码修补到我的应用程序中,但它没有用.我之前从未对AJAX做过任何事情,我不知道修改它是否有效.
我不需要任何花哨的东西,我只需要检测所有(具体的,实际上,但我必须首先检测所有并从那里开始)AJAX响应并将它们修补到IF语句中以供使用.所以,最终,我想要像:
if (ajax.response == "certainResponseType"){
//Code
}
Run Code Online (Sandbox Code Playgroud)
, 例如.
更新: 似乎我应该澄清我不是在尝试发送请求 - 我正在开发一个内容脚本,我需要能够检测到网页的AJAX请求(不是我自己的),所以我可以执行一个检测到响应时起作用.
我正在编写Chrome扩展程序,在其中的一部分中,我需要在单击弹出页面上的按钮时获取当前选项卡的标题和URL.
我以前曾经使用过Chrome的消息传递系统,并且经过多方努力,很多时候都设法让它运行起来.但是,我从来没有必要在弹出页面上使用它们,而且从我读过的内容来看,这样做要困难得多.
到目前为止,我设法弄清楚的时间表是这样的:
popup.html/ popup.js:单击按钮popup.html/ popup.js:请求/消息被发送到内容脚本contentScript.js:从弹出页面接收请求/消息contentScript.js:当前选项卡的标题和URL存储在变量中contentScript.js:2个变量作为字符串化响应发送popup.html/ popup.js:从响应中解析出2个变量通常我会想到这一点,但是,我已经阅读了一些在工作中抛出扳手的东西,例如:
chrome.tabs.getSelected只能在后台页面/脚本中使用.这是否意味着根本不需要使用内容脚本?我已经发现Chrome的消息传递系统很难,但这让我很困惑.因此,这篇文章.
问题
在批处理文件的一部分(有点,请参阅额外信息)我需要重新启动资源管理器,所以我使用经过试验和测试的方法
taskkill /f /im explorer.exe >nul
explorer.exe
Run Code Online (Sandbox Code Playgroud)
然后发生这种情况
explorer.exe 成功终止explorer.exe 启动(见图2),但只打开一个资源管理器窗口,我将无限期地留下(参见图1)然后,我只能通过从任务管理器启动一个新任务来正确地重新启动资源管理器,因为我认为,它Win + R是资源管理器的一部分.
额外的信息
现在,我说"有点",因为我正在使用WinRAR创建的自执行SFX存档运行批处理文件.因此,在执行时,存档的内容被提取到,%temp%并且在成功提取时运行用户定义的文件(通常是引导过滤器,在这种情况下,我的批处理文件).
到目前为止,我已经推断过了
explorer.exe 肯定是被完全杀死了.explorer.exestart explorer.exe | cmd.exeExplorer这样的命令没有正确重启,所以它绝对不是.bat文件的问题.我可以确认它适用于Windows XP和Windows 7 x86,但不适用于Windows 7 x64(这是我的系统).
状态
目前,我对WinRAR持怀疑态度,因为我已经证明代码本身有效.所以,我正在用不同版本的WinRAR创建自执行的SFX.到目前为止,我已尝试过版本:
并且每次都有相同的结果.
我昨天向dev@rarlab.com提交了一份错误报告,今天早上得到了Eugene Roshal的答复
您好,SFX模块使用ShellExecuteEx来启动安装应用程序.通常它运作良好.我不知道为什么Explorer决定切换到窗口模式.现在我构建了一个小型独立程序
#include <windows.h>
void main()
{
SHELLEXECUTEINFO si;
memset(&si,0,sizeof(si));
si.cbSize=sizeof(si);
si.lpFile="test.bat";
si.nShow=SW_SHOWNORMAL;
ShellExecuteEx(&si);
}
Run Code Online (Sandbox Code Playgroud)
它运行test.bat,其中包含样本中的内容.此程序显示与WinRAR SFX完全相同的行为,因此Explorer在窗口中启动.
和今天早上的第二封电子邮件
对不起,现在没有建议.我用CreateProcess替换了ShellExecuteEx
#include <windows.h>
void main()
{ …Run Code Online (Sandbox Code Playgroud) 在我的一个脚本中,我需要使用包含括号内部IF语句的变量,但是字符串缺少右括号或者脚本过早退出* was unexpected at this time(实际上不是星号),具体取决于场景.
例
@echo off
SET path=%programFiles(x86)%
echo Perfect output: %path%
IF NOT "%path%" == "" (
REM Variable is defined
echo Broken output: %path%
)
pause >nul
Run Code Online (Sandbox Code Playgroud)
产量
Perfect output: C:\Program Files (x86)
Broken output: C:\Program Files (x86
Run Code Online (Sandbox Code Playgroud)
我认为/知道这是因为它认为右括号C:\Program Files (x86)是IF语句的结尾并且它在echo完成之前退出.
是否有一种简单的方法可以解决这个问题?最好不要诉诸
IF语句,因为我需要在其中运行多行代码,GOTOs,因为它不实用,SETLOCAL EnableDelayedExpansion并且使用!path!而不是%path%,因为我记得在某处读取该方法不能在OS中一致地工作.如果没有,我很乐意接受所提供的最可靠的解决方案,无论它是什么.
(这个场景不值得讨论.这只是问题的一个精炼,集中的例子.结构需要像这样,因为它在我的实际脚本中,原因我不会进入.它除了这一点,它只会混淆事物并分散实际问题.)
有没有办法CLS输出一行?我不相信有任何开关CLS,所以可能更好的问题是:
有什么办法吗?
我只是想通过提供实时反馈/信息来使我的脚本更加用户友好,而不是通过稍微改变的多行.但是,我能想到的唯一方法就是这样:
@echo off
goto Prep
:Prep
SET count=5
SET genericMessage=This window will close
goto Output
:Output
IF NOT %count% == -1 (
cls
IF %count% == 0 (
echo %genericMessage% now.
) ELSE (
echo %genericMessage% in %count% seconds.
)
SET /A count=%count% - 1
ping localhost -n 2 >nul
goto Output
) ELSE (
exit
)
Run Code Online (Sandbox Code Playgroud)
所以,你得到这个:

但问题是,当我只想通过擦除并重新输出它来刷新一行时,CLS擦除所有输出.
有人有主意吗?
我正在尝试使用 Selenium WebDriver 和 ChromeDriver 连接到现有会话并设置下载文件夹。由于某种原因,它总是失败并抛出以下错误:
\n>>> from selenium import webdriver\n>>>\n>>> chromeOptions = webdriver.ChromeOptions()\n>>>\n>>> download_folder = "D:\\\\Test"\n>>> preferences = {\n... "download.default_directory" : download_folder\n... }\n>>> chromeOptions.add_experimental_option("prefs", preferences)\n>>> chromeOptions.add_experimental_option("debuggerAddress", "127.0.0.1:1111")\n>>>\n>>> chromeOptions.to_capabilities()\n{'browserName': 'chrome', 'version': '', 'platform': 'ANY', 'goog:chromeOptions': {'prefs': {'download.default_directory': 'D:\\\\Test'}, 'debuggerAddress': '127.0.0.1:1111', 'extensions': [], 'args': []}}\n>>>\n>>> driver_Chrome = "D:\\\\chromedriver.exe"\n>>> driver_Web = webdriver.Chrome(executable_path=driver_Chrome, chrome_options=chromeOptions)\nTraceback (most recent call last):\n File "<stdin>", line 1, in <module>\n File "C:\\Users\\username\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages\\selenium\\webdriver\\chrome\\webdriver.py", line 76, in __init__\n RemoteWebDriver.__init__(\n File "C:\\Users\\username\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages\\selenium\\webdriver\\remote\\webdriver.py", line 157, in __init__\n self.start_session(capabilities, browser_profile)\n File …Run Code Online (Sandbox Code Playgroud) python webdriver python-3.x selenium-chromedriver selenium-webdriver
简单的标题,真的.
是否有正则表达式删除除单词之间的所有空格.
所以
" Hello. How are you today? "
Run Code Online (Sandbox Code Playgroud)
会成为
"Hello. How are you today?"
Run Code Online (Sandbox Code Playgroud) 我的AutoHotKey脚本的一部分取代@@了我的电子邮件地址.目前,我这样做:
::@@::
SendInput, example@domain.com
return
Run Code Online (Sandbox Code Playgroud)
足够简单,它工作得相当好,但你需要在更换之前推送空格/逗号/句号/等.有没有办法在没有任何进一步交互的情况下立即更换它 - 一旦匹配标准,它就会被取代?
在AutoHotKey文档之后,我尝试过:
StringReplace, var_Email, var_Email, @@, example@domain.com, All
Run Code Online (Sandbox Code Playgroud)
但它只是清除了@@.
使用下面只是简单的不正常工作-webkit-和-moz-浏览器:
#exampleElement {
background-color: red; /* For example */
}
#exampleElement ::selection {
color: black;
background-color: white;
}
Run Code Online (Sandbox Code Playgroud)
在浏览器,Opera和Safari,::selection的background-color呈现,如果它是50%的α,但字体颜色是正确的.
Chrome 29.0.1547.62:

Opera 15.0.1147.130:

Safari 5.34.57.2:

在Firefox中,将::selection忽略整个规则.::selection的background-color恰好是白因#exampleElement的黑暗background-color(感谢@BoltClock用于注意到,)
Firefox 22.0:

在Internet Explorer中,(你会相信)一切都完美呈现.
Internet Explorer 10.0.9200.16660:

这仅仅是这些渲染引擎/浏览器的漏洞还是有-webkit-和-moz-我是不知道的替代品?
我在jsFiddle上保存了一个这样的例子,供大家看看:http://jsfiddle.net/BWGJ2/
最初,这篇文章是关于我尝试将ZeroClipboard注入网页并由我的Chrome扩展程序使用,但是我已经愚弄了这个场景,看似徒劳无益的尝试找出问题而我仍然无法做到这一点.让它工作.
我甚至难以在ZeroClipboard自己的GitHub上获得实际的,记录的"最小示例 "工作(诚然,我已经将源代码修改为实际上是HTML5有效的,但确切的原始版本也不起作用).即使test.html,包含在tar.gz存档中,也不起作用!
"最小例子":代码
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<input type="button" id="d_clip_button" data-clipboard-text="Copy Me!" value="Copy To Clipboard" />
<script src="ZeroClipboard.js"></script>
<script>
var clip = new ZeroClipboard( document.getElementById('d_clip_button') );
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
"最小示例":控制台输出
Uncaught TypeError: object is not a function index.html:11
Run Code Online (Sandbox Code Playgroud)
信息
zeroclipboard-1.0.7.tar.gz存档的全部内容与其位于同一目录中index.html.ZeroClipboard.js文件未损坏/不完整,正在正确加载.
要么我在这里遗漏了一些非常明显的东西,要么ZeroClipboard的文档/功能非常糟糕.
javascript google-chrome typeerror zeroclipboard referenceerror
我马上就承认,至少可以说,我是帕斯卡尔缺乏经验的.所以,我能得到的任何帮助将不胜感激.:)
作为更大程序的一部分,我需要将一个字符串变量写入剪贴板.我在Lazarus(版本1.0.12)中创建了一个新项目,所以我可以尝试弄清楚如何在没有由额外的,不必要的代码引起的复杂性的情况下这样做,我在下面包含了这些:
program varToClipboard;
uses Clipbrd;
var
textToCopy:string;
begin
textToCopy := 'Test text from Pascal';
Clipboard.AsText := textToCopy;
end.
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,以及所需的LCLBase依赖项,我在运行编译的EXE时在CMD中收到以下错误:
An unhandled exception occurred at $000000000043D45E :
EAccessViolation : Access violation
$000000000043D45E CLIPBOARDREGISTERFORMAT, line 98 of ./include/lclintf.inc
$000000000043C35B PREDEFINEDCLIPBOARDFORMAT, line 185 of lclintf.pas
$0000000000415B0C TCLIPBOARD__SETASTEXT, line 452 of ./include/clipbrd.inc
$0000000000401802 main, line 12 of varToClipboard.lpr
Run Code Online (Sandbox Code Playgroud)
根据文档,我似乎做得很对.尽管如此,我发现文档缺乏时间.
另外,我必须做什么才能运行已编译的EXE(只生成并将字符串写入剪贴板)而不会弹出控制台窗口?
我喜欢随便携带 - 尽可能多的程序/应用程序,所以我经常创建自动执行的SFX存档,提取到%temp%然后运行选定的文件(通常是原始.exe或必要时的.bat文件).
我正在尝试将应用程序的x86和x64版本组合到一个版本中,因为我不喜欢有2个文件.所以,我有2个文件夹("x86"和"x64"),包含程序的不同版本和根目录中的.bat文件,它将检查用户的位数,然后启动相应的版本.不过,我有几个问题.
这是我的代码:
checkandrun.bat
@echo off
goto Payload
:Payload
echo Checking architecture bit-type...
IF EXIST "%systemRoot%\SysWOW64" (
echo Your version of Windows is 64-bit [x64]
start "x64\GCFScape.exe" >nul
) ELSE (
echo Your version of Windows is 32-bit [x86]
start "x86\GCFScape.exe" >nul
)
echo.
echo Starting the appropriate version...
goto End
:End
echo.
echo This window will close in 20 seconds.
ping localhost -n 21 >nul
exit
Run Code Online (Sandbox Code Playgroud)
如果我使用start那么原始命令窗口将根据需要正确退出,但会打开一个新的,常量命令窗口,应用程序将无法启动.
如果我不使用start该应用程序将启动但命令窗口将保持打开状态,并且不会超过用于启动.exe的代码行.如果我关闭应用程序本身,那么命令窗口将按照exit …
javascript ×5
batch-file ×4
windows ×2
ajax ×1
autohotkey ×1
bit ×1
call ×1
clipboard ×1
cmd ×1
console ×1
css ×1
dom ×1
dos ×1
explorer ×1
firefox ×1
freepascal ×1
instant ×1
lazarus ×1
message ×1
parentheses ×1
pascal ×1
python ×1
python-3.x ×1
regex ×1
replace ×1
request ×1
selection ×1
taskkill ×1
text ×1
typeerror ×1
webdriver ×1
whitespace ×1