我遇到一些问题,无头铬浏览器无法正确创建 html 文件。创建的唯一内容/文件是一个{}.html文件
我的domains.txt包含:
https://ibm.com/
https://www.linux.org/whats-new/
PS:我使用的是Ubuntu 18.04 64位linux
我使用的命令如下:
cat domains.txt | xargs -I {} -P 4 sh -c timeout 25s chromium-browser --headless --no-sandbox --user-agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537. 36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' --dump-dom https://{} 2> /dev/null > {}.html
这是取自这个链接
答案1
代码:
cat domains.txt | xargs -I {} -P 4 sh -c timeout 25s chromium-browser --headless --no-sandbox --user-agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537. 36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' --dump-dom https://{} 2> /dev/null > {}.html
这缺少围绕参数的引号sh -c
。通过正确引用,它还会将代码注入到sh -c
来自 的脚本中xargs
,这是一个安全漏洞。
管道写得更好
xargs -I {} -P 4 sh -c '
timeout 25s chromium-browser \
--headless --no-sandbox \
--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537. 36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36" \
--dump-dom \
"https://$1" 2>/dev/null >"$1.html"' sh {} <domains.txt
...但请注意,这仍然会写入名为“东西”的文件,例如https://ibm.com/.html
如果文件中有这些字符串domains.txt
(即奇怪命名的子目录中的文件),并且它会尝试获取诸如https://https://ibm.com/
.
我认为目的是在文件中只保留实际的域,而不是完整的 URL domains.txt
,即
ibm.com
www.linux.org
就我个人而言,我宁愿使用更简单的解决方案curl
。