i,o,pでXPath生成ツール

i:生成 o:除外条件付き生成 p:除外条件+1つの要素のみを生成 Shift+i:除外条件変更 Shift+o:要求条件入力 Shift+p:要求Hits数変更

Author
minarai
Daily installs
0
Total installs
40
Ratings
0 0 0
Version
0.4.2
Created
2019-02-13
Updated
2024-08-16
License
N/A
Applies to
All sites

■ 概要

マウスで指し示した要素を指すXPath式とCSSセレクタを雑に作るツールです

■ 使い方

1.XPath/CSS式を作りたい要素の上をマウスでホバーしながらi,o,pキーのどれかを押してください
 押すキーによって作るXPath/CSS式の傾向を指示できます;

 i…通常の結果を表示します(基本)
 o…設定した除外文字列(後述)を含まない作例のみを表示します
 p…設定した除外文字列を含まず、かつページ全体で1つ(変更可)の要素だけにヒットする作例のみを表示します

2.指した要素の外枠がしばらく赤い点線で表示されるので指したかった要素が指せているか確認してください
 ポップアップパネルが出てエディットエリアと作成したXPath/CSS式の作例がいくつか表示されます
 「//」で始まるものがXPathでそれ以外がCSSセレクタです
 作例には強いランダム性があるのでキーを押すたびに違う候補が出ます
 何度も押して作例を読みながらDOM構造を把握しつつ、良い候補が出るまでキーを連打するのが基本的な使い方です

 Hits列にはその作例でヒットする要素の数が表示されます
 HTMLツリー上に不可視状態(offsetHeight=0)でヒットする要素がある時は「可視状態の要素数|全要素数」→「0|1」のように2つの数が表示されます
 目的の要素の総個数が分かっている時はその数と同じものに当たりをつけると早いです
 このHits数セルをクリックすると後述するHits数指定(Shift+p)をその数に変更した上pキーの作例制作をすぐにします

 Possibly列と文字色ではその作例のだいたいの性質が次のように分かります;

・last(青)
 「(個数が不定の)列挙要素の最後の1つ」を指定したい時に有力候補です
 「同タグの兄要素があり、弟要素はないために、兄弟要素の順位指定に[last()]を使っている」ものがこれになります

・1st(緑)
 「(個数が不定の)列挙要素の最初の1つ」を指定したい時に有力候補です
 「同タグの弟要素があり、兄要素はないために、兄弟要素の順位指定に[1]を使っていて、Hits数が1で、text()を指定していない」ものがこれになります
 この表示を期待する時はuAutoPagerize等のページ継ぎ足しアドオンを使用していると気が付かないところで次ページが読み込まれていてHits数が1にならない(ため、この表示が出ない)ということが起こるので、継ぎ足し系アドオンは一時的にオフにした方が良いかもしれません

・id/class(赤紫)
 idかclass属性を使用しています。変更に強いXPath式を作るのにセオリーとして良い候補です

・href(赤)
 href属性を使用しています。あまり実用的でない場合が多いです

 作例の最後の3つだけは特別で、固定的な作り方をしています。これらはi,o,pの別の影響を受けません;
 1つめ…その要素だけの全ての属性を書いただけのもの(親ノードは遡らない)
 2つめ…その要素のフルパスを記述しただけのもの
 3つめ…全ての親ノードを遡り全ての属性を網羅したもの

3.作例上をマウスでホバーするとその式でヒットする要素が緑色に光るので確認してください
4.作例をクリックするとその式がエディットエリアにコピーされます(Ctrlキーを押しながらだと「"」を「\"」にエスケープしてコピーされます)
5.作例をダブルクリックするとその式をクリップボードにコピーして終了します。Escキーを押すと何もせず終了します

6.エディットエリアにXPath/CSS式を書くとリアルタイムでHits数やPossiblyを表示し、マウスホバーすればヒットする要素が緑色に光ります
 作例で出たものを元に人間が仕上げるのに使うようになっています
 初期状態ではここには指した要素を直接指すCSSセレクタを自動で1つ作ったものが入ります
 「エリア内の文字列をクリップボードにコピーして終わる」等の機能は特にないので自分でCtrl+A、Ctrl+C、ESCと押すなどしてください

7.パネル上部にある[Renegerate]ボタンをクリックすると同じ条件で再生成します

■ エディットエリアでだけ使える独自構文

 エディットエリアに書くXPath/CSSでだけ使える独自構文があります(複数使用可)
 「:visible」を式の最後に書くと不可視状態でない(offsetHeightが0ではない)要素だけがヒットします
 「:inscreen」を式の最後に書くとスクロール画面内に1ピクセルでも入っている要素だけがヒットします
 「:text*=~」を式の最後に書くとtextContentに正規構文/~/が含まれている要素だけがヒットします。これは常に行末まで読むので一番最後に書いてください

■ 除外条件と要求条件の指定方法

○ 除外条件指定 Shift+i
 Shift+iを押すとプロンプトが出るので作例に含まれてほしくない文字列を正規表現(+独自構文、後述)で入力するとそれ以降o,pキーでの作例が全てそれを含まないものになります
 デフォルトでは"href=|text\\(\\)|title=|alt=|src="が設定されています
 これは、総数が不定で列挙される項目や、実際の内容が固定されない同格の要素を指すXPathを探せるような設定です
 デフォルトを変えたければスクリプト冒頭の
 var excludeRE = "href=|text\\(\\)|title=|alt=|src=";
 の部分を変更してください

○ 要求条件指定 Shift+o
 Shift+oを押すとプロンプトが出るので作例に含んでほしい文字列を正規表現(+独自構文、後述)で入力するとそれ以降i,o,pキー全ての作例がそれを含むものになります
 デフォルトは空欄です
 初回のプロンプト入力時にはフォームの初期値として、よく利用することになる "@id=|\\#|@class|\\." が入ります(デフォルト値がそうなわけではありません)

○ Hits数指定 Shift+p
 Shift+pを押すとプロンプトが出るので数値を入力するとそれ以降pキーでの作例はその数のヒット数が出るもののみになります
 デフォルトは1です

○ trace ancestor指定 パネル上でShift+ホイール
 パネルの左上にtrace ancestor=0 [+]/[-] という部分があります
 この[+][-]ボタンのクリックかパネル上でShift+ホイールで指した要素からいくつ親要素へ遡ったXPath/CSS式を作るかを変更できます
 例えば2にすると指した要素の2つ祖先の要素の式を作ります

・shift+iとshift+oで使える独自構文
 キーワードには正規表現が使えるほか、OR検索は|で、AND検索はスペースで区切ることで(厳密に文字としてスペースを使いたい時は\sを使ってください)、
 NOT検索は行頭1文字目を!にすることでそこからスペースが出るまでがNOT指定になります(!は行頭1文字目の1回きりしか使えません)。
 |やスペースや!は全角でも構いません
 例えば「ABCやDEFを含まず、GHIかJKLを含み、かつMNOとPQRも含む」ものにヒットさせたければ
 「!ABC|DEF GHI|JKL MNO PQR」です
 独自構文を付けたことでNOTキーワードと要求キーワードが一度に指定できるようになったためshift+iとshift+oの両機能がある意味が分からなくなっています

■ おまけ AutoPagerize用MY_SITEINFO書き出し機能

 uAutoPagerizeのMY_SITEINFO(やweAutoPagerizeのユーザーSITEINFO)の雛形をそのままコピペして挿入できる書式で書き出させることができます。やり方は
1.nextLinkに指定したい要素(「次のページ」「>」などのリンク)のXPath式の作例を出させて使いたい式の行の右端の「->」をクリック
 この時は末尾がAタグでない場合はAタグに当たるまで最大10回まで/..を追加してAタグの親要素に遡るXPathがコピーされます。他の時にこの目的で使ってもかまいません
 Aタグに当たらなかった場合は表示通りのXPathがコピーされます
2.pageElementに指定したい要素(継ぎ足したいコンテンツ)のXPath式の作例を出させて使いたい式の行の右端の「[]」をクリック

 それぞれ良い候補と思われる->と[]は赤い色がついています
 順番はどうでも良いので1と2の両方を決めるとアラートボックスで確認が出て、このボックスを閉じると雛形がクリップボードにコピーされます
 適宜手直しをしてuAutoPagerizeのMY_SITEINFOなどに挿入してください

 またスクリプト冒頭部分の設定で他のスクリプト用のSITEINFOを出力させることもできます
 const SITEINFO_UAP = 1; // -> [] で「AutoPagerize」用のSITEINFOを出力
 const SITEINFO_WCA = 0; // -> [] で「web漫画にショートカットキーを追加」用のSITEINFOの雛形を出力
 const SITEINFO_YHM = 0; // -> [] で「ヤフオクで非表示とメモ」用のSITEINFOの雛形を出力
 部分の0~1を1にしたものが出力されます
 複数の項目を1にすることもできその場合はつなげて出力されるので必要な行だけ使ってください


不具合や要望があれば:(Bitmessage)BM-NBKhGgzahPds3f5Ms6ZRJyvZoMNgTYy4