从bash的新Google Chrome浏览器会话中获取“user agent”字符串

vmjh9lq9  于 2023-10-14  发布在  Go
关注(0)|答案(4)|浏览(128)

我想从bash的新Google Chrome浏览器会话(刚打开)中获取User Agent HTTP request header字符串,并将其放入变量中。
下面是伪代码:

USER_AGENT="$(google-chrome --user-agent)"
echo "$USER_AGENT"

输出示例:

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36

如果使用google-chrome命令无法做到这一点,那么等效的解决方法是什么?

ojsjcaue

ojsjcaue1#

Chrome在headless模式下使用--repl命令行选项计算JavaScript表达式。您可以尝试以下操作来获取user agent string

echo navigator.userAgent | /opt/google/chrome/chrome --headless --repl 2> /dev/null | sed 's/^>>> //' | jq -r .result.value

注意:运行chrome二进制文件(例如:/opt/google/chrome/chrome)而不是google-chrome shell脚本,因为shell脚本似乎不支持传递标准输入。
sed命令从输出中删除提示符,jq命令从Chrome打印的JSON字符串中提取值。
但是请注意,使用--headless命令行标志运行Chrome时的用户代理字符串与定期运行时的用户代理字符串不同。至少Chrome 105似乎有“无头Chrome”而不是“Chrome”。

gfttwv5a

gfttwv5a2#

这里有一个替代方法,它不特定于Chrome,也适用于许多其他浏览器和http客户端。它涉及使用netcat设置HTTP服务器并捕获User-Agent头值:

echo -e 'HTTP/1.1 200 OK\r\n\r\n' | nc -q 0 -l localhost 8080 | sed -n '/^User-Agent: /Is/.*: //p' & google-chrome --headless http://localhost:8080 2>/dev/null

你可以用另一个浏览器或http客户端来替换最后的google-chrome调用。

cs7cruho

cs7cruho3#

另一个基于Jukka Matilainen的回答:

USER_AGENT=$(
    while read request; do
        [[ $request =~ ^User-Agent:\ (.*)$ ]] && { echo "${BASH_REMATCH[1]}"; break; }
    done < <(nc -q0 -l -p 8080) &
    curl http://localhost:8080  2> /dev/null # change curl to whatever cli browser
)
echo "$USER_AGENT"
llycmphe

llycmphe4#

#!/bin/bash
SCRIPT_ID="My-Script"
/opt/google/chrome/chrome --headless=new --remote-debugging-port=9222 --user-data-dir="$HOME/.config/google-chrome/${SCRIPT_ID}-TMP/" &>/dev/null &
PID=$!
sleep 0.35
curl --retry-connrefused --retry 10 --retry-delay 1 http://localhost:9222/json/version --silent | jq -r '.["User-Agent"]' | sed s/Headless//
kill -SIGINT $PID

对于冗余,在某些情况下中断,还可以添加以下内容进行清理:

for PID in $(ps auxw | grep "config/google-chrome/${SCRIPT_ID}-TMP" | grep -v grep | awk '{print $2}'); do kill -SIGINT $PID; done
rm "$HOME/.config/google-chrome/${SCRIPT_ID}-TMP/SingletonLock" 2>/dev/null

相关问题