chromeのconsoleからxpathを使いつつhrefを取ってくるワンライナー

ある特定のidの配下にあるaタグのhrefを全部取りたかった

nodejsなりrubyなりで書けるが、よりお手軽にchrome上でしたかった

やり方

xpathを使う

$x('//*[@id="target_dom_id"]//a/@href').map((href) => {return href.value})

解説

chromeでは$x()xpathからdomを取ってくる機能がある

なのでここの中でhrefの属性値を取ってくるようなxpathを書いている

xpathでは/@hrefと書くと属性値が取得できるようなのでそれを利用する

これでhrefが取れるわけだが、表示として下記のような感じになり見づらいScreenshot from 2020-05-03 07-12-36.png (49.6 kB)

f:id:kytiken:20200503072302p:plain

なのでmapを使って整形する

.map((href) => {return href.value})

以上

ubuntuをインストールしたときにセットアップしたもの

Ubuntu20.04が出たので入れてみた

最初にやったことをメモる

やったこと

  1. apt update & upgrade

    sudo apt update

    sudo apt upgrade

  2. JetBrains mono install

    https://www.jetbrains.com/lp/mono/

  3. ターミナルのフォント設定変更

    JetBrains monoを設定

    f:id:kytiken:20200425141401p:plain

  4. カラースキームを変更

    Solarized Darkにする

    f:id:kytiken:20200425141446p:plain

  5. ホームディレクトリ名前を変更

    LANG=C xdg-user-dirs-gtk-update

  6. vscode install

    https://code.visualstudio.com/

    sudo dpkg -i code_1.44.2-1587059832_amd64.deb

  7. slack install

    https://slack.com/intl/ja-jp/downloads/linux

    sudo dpkg -i slack-desktop-4.4.2-amd64.deb

  8. nvim install

    snap install nvim

  9. aws-cli install

    snap install aws-cli --classic

  10. docker install

    sudo snap install docker

  11. fish install

    https://launchpad.net/~fish-shell/+archive/ubuntu/release-3

    sudo apt-add-repository ppa:fish-shell/release-3

    sudo apt-get update

    sudo apt-get install fish

  12. デフォルトシェルを変える

    sudo chsh -s /usr/bin/fish

  13. CapsLock -> Ctrl

    sudo nvim /etc/default/keyboard

    XKBOPTIONS="ctrl:nocaps"

vscodeとslackをなぜsnapで入れていないか?

日本語対応していないから

https://forum.snapcraft.io/t/slack-doesnt-support-cjkv-text-input-ibus/8538

ここで議論されているが、ibusに対応していないため、対応するまではaptのパッケージを使用する・・・

elangのremote objectチュートリアルで詰まった

elangでremote objectのチュートリアルをやっていたわけだが、エラーが出て詰まった

erights.org

? var uri :=  "captp://*yajqnhlyv6dsln4lbldub3sde2pv4ntl@6da37224c737:45401,172.24.0.2:45401/4vpusf2seuryrx5e6d2iu4npzvsltfvk"
# value: "captp://*yajqnhlyv6dsln4lbldub3sde2pv4ntl@6da37224c737:45401,172.24.0.2:45401/4vpusf2seuryrx5e6d2iu4npzvsltfvk"

? def sr := introducer.sturdyFromURI(uri)
# value: <SturdyRef>

?  introducer.onTheAir()
# value: ["3DES_SDH_M2", "3DES_SDH_M"]
?  def remote := sr.getRcvr()
# value: <Promise>

? === 2020-01-07T16:07:37.396Z (StartUpProtocol.processMessage:StartUpProtocol.java:1227) ERR
comm: Exception during startup for
  net.vattp.data.DataPath@115d4d7b|172.24.0.2:45401|yajqnhlyv6dsln4lbldub3sde2pv4ntl, startupState=6
--vvvv--
No parameter accepted


java.security.InvalidParameterException: No parameter accepted
        at java.base/sun.security.provider.DSA.engineSetParameter(DSA.java:371)
        at java.base/java.security.Signature$Delegate.engineSetParameter(Signature.java:1427)
        at java.base/java.security.Signature.setParameter(Signature.java:993)
        at net.vattp.data.StartUpProtocol.signSent(StartUpProtocol.java:1517)
        at net.vattp.data.StartUpProtocol.handleStateOutgoingExpectREPLYINFO(StartUpProtocol.java:913)
        at net.vattp.data.StartUpProtocol.processMessage(StartUpProtocol.java:1187)
        at net.vattp.data.DataPath.newIncomingMsg(DataPath.java:703)
        at net.vattp.data.DataCommThunk.run(DataCommThunk.java:207)
        at org.erights.e.elib.vat.PendingCall.innerRun(PendingCall.java:75)
        at org.erights.e.elib.vat.PendingEvent.run(PendingEvent.java:74)
        at org.erights.e.elib.vat.HeadlessRunner.run(HeadlessRunner.java:174)
        at java.base/java.lang.Thread.run(Thread.java:830)

--^^^^--

=== 2020-01-07T16:07:37.449Z (StartUpProtocol.processMessage:StartUpProtocol.java:1227) ERR
comm: Exception during startup for
  net.vattp.data.DataPath@1fe3232a|172.24.0.2:45401|yajqnhlyv6dsln4lbldub3sde2pv4ntl, startupState=6
--vvvv--
No parameter accepted


java.security.InvalidParameterException: No parameter accepted
        at java.base/sun.security.provider.DSA.engineSetParameter(DSA.java:371)
        at java.base/java.security.Signature$Delegate.engineSetParameter(Signature.java:1427)
        at java.base/java.security.Signature.setParameter(Signature.java:993)
        at net.vattp.data.StartUpProtocol.signSent(StartUpProtocol.java:1517)
        at net.vattp.data.StartUpProtocol.handleStateOutgoingExpectREPLYINFO(StartUpProtocol.java:913)
        at net.vattp.data.StartUpProtocol.processMessage(StartUpProtocol.java:1187)
        at net.vattp.data.DataPath.newIncomingMsg(DataPath.java:703)
        at net.vattp.data.DataCommThunk.run(DataCommThunk.java:207)
        at org.erights.e.elib.vat.PendingCall.innerRun(PendingCall.java:75)
        at org.erights.e.elib.vat.PendingEvent.run(PendingEvent.java:74)
        at org.erights.e.elib.vat.HeadlessRunner.run(HeadlessRunner.java:174)
        at java.base/java.lang.Thread.run(Thread.java:830)

--^^^^--

=== 2020-01-07T16:07:37.451Z (PendingEvent.report:PendingEvent.java:107) WRN
causality: Problem in turn <<Vat start in <runs in start>>,115>: 
--vvvv--
Failed: done

- DelayedRedirector#__reactToLostClient(Object)
. <a DelayedRedirector>.__reactToLostClient(problem: <IOException: 172.24.0.2:45401: java.security.InvalidParam...a.base/java.lang.Thread.run(Thread.java:830)\n         \n         >)

java.lang.RuntimeException: Failed: done
        at org.erights.e.develop.assertion.T.fail(T.java:85)
        at org.erights.e.elib.ref.EProxyResolver.getOptRef(EProxyResolver.java:112)
        at org.erights.e.elib.ref.EProxyResolver.resolve(EProxyResolver.java:184)
        at org.erights.e.elib.ref.EProxyResolver.smash(EProxyResolver.java:212)
        at org.erights.e.elib.ref.DelayedRedirector.__reactToLostClient(DelayedRedirector.java:115)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:567)
        at org.erights.e.elib.prim.InstanceMethodNode.innerExecute(InstanceMethodNode.java:111)
        at org.erights.e.elib.prim.JavaMemberNode.execute(JavaMemberNode.java:188)
        at org.erights.e.elib.prim.E.callAll(E.java:164)
        at org.erights.e.elib.vat.PendingDelivery.innerRun(PendingDelivery.java:96)
        at org.erights.e.elib.vat.PendingEvent.run(PendingEvent.java:74)
        at org.erights.e.elib.vat.HeadlessRunner.run(HeadlessRunner.java:174)
        at java.base/java.lang.Thread.run(Thread.java:830)

--^^^^--

openjdk最新を使っていたのが原因のようで、6まで下げたら動いた

そのためのdocker

FROM openjdk:6

ENV EHOME=/ehome
RUN mkdir $EHOME
RUN curl -O http://erights.org/download/0-9-3/E-purej-0.9.3a.tar.gz
RUN tar zxvf E-purej-0.9.3a.tar.gz -C $EHOME

J2SE 1.4 をDockerで動かす試み

J2SE 1.4 をDockerで動かすときのメモです

java -versionでバージョン番号が出るところまでしか見ていないので、もしかしたらちゃんと動かないかもしれないが、過程をメモしておく

  1. j2sdk-1_4_2_19-linux-i586.binをダウンロード

    www.oracle.com

    Oracleアカウントが必要なので注意

  2. 作業用ディレクトリにj2sdk-1_4_2_19-linux-i586.binを入れる

    mkdir ~/java14/sandbox/ mv j2sdk-1_4_2_19-linux-i586.bin ~/java14/sandbox/ cd ~/java14/sandbox/

  3. centos7でコンテナを作成

    sudo docker run -v $(pwd):/tmp -it --name kytiken-java14 centos:7 bash

  4. yum install

    yum -y install ld-linux.so.2 libnsl

  5. j2sdk-1_4_2_19-linux-i586.binを実行

    cd /tmp chmod +x j2sdk-1_4_2_19-linux-i586.bin ./j2sdk-1_4_2_19-linux-i586.bin

  6. usrに移動

    mkdir /usr/java mv j2sdk1.4.2_19/ /usr/java/

  7. JAVA_HOME設定

    export JAVA_HOME=/usr/java/j2sdk1.4.2_19

  8. PATH通す

    export PATH=$PATH:$JAVA_HOME/bin

  9. java バージョン確認

    java -version

以上

あとがき

そもそもこれをしようと思ったのはElangという言語を動かすためにJava1.4が必要だと思ったからなのだが、やってみるとJava1.4だとうごかなかった

したがって、この作業はまったく不要だったわけだが、せっかく調べたので手順を残しておく

fishでLC_ALLとLANGを設定する

方法

設定用のスクリプトファイルを作成

touch {$HOME}/.config/fish/conf.d/lang.fish

編集

 set -xg LC_ALL ja_JP.UTF-8
 set -xg LANG ja_JP.UTF-8

背景

hyperというアプリケーションを使っていて LC_ALLLANG が設定されていないと日本語表示がおかしかったから設定したかった

hyper.is

感想

設定したらちゃんとhyperで日本語表示できるようになったからよかった

hyperちょっと使ってみた感じ悪くない

あとで記事にする

以上