tag:crieit.net,2005:https://crieit.net/tags/xpath/feed 「xpath」の記事 - Crieit Crieitでタグ「xpath」に投稿された最近の記事 2020-08-24T19:08:15+09:00 https://crieit.net/tags/xpath/feed tag:crieit.net,2005:PublicArticle/16037 2020-08-24T18:47:06+09:00 2020-08-24T19:08:15+09:00 https://crieit.net/posts/JavaScript-postMessage-DOM-Xpath JavaScriptのpostMessageでDOMツリーのノード参照を渡す方法[Xpath] <p>ポップアップしたウィンドウに要素の参照(DOMノード)を送りたかったので、この記事を書いた。</p> <h1 id="Web MessagingはDOMノードを送れない"><a href="#Web+Messaging%E3%81%AFDOM%E3%83%8E%E3%83%BC%E3%83%89%E3%82%92%E9%80%81%E3%82%8C%E3%81%AA%E3%81%84">Web MessagingはDOMノードを送れない</a></h1> <p>JavaScriptでは、<a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Web/API/Window/postMessage">window.postMessage</a>を使うことで、ポップアップやiframeなどの別ウィンドウとWeb Messaging(HTML5)を介して通信することができる。</p> <p>子ウィンドウ、親ウィンドウへの参照はそれぞれ<code>window.open()</code>と<code>window.opener</code>で持つことができるから、<code>window.postMessage</code>と併せてあらゆるデータのやり取りが自由にできそうなものである。</p> <p>しかし、<code>window.postMessage</code>では送ることができないデータがある。</p> <p>MDN web docsには、<code>message</code>について</p> <blockquote> <p>他のウィンドウに送られるデータ。データは <a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm">the structured clone algorithm</a> に従ってシリアル化されます。つまり、手動でシリアル化することなく様々なデータオブジェクトを渡すことができます。<br /> <a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Web/API/Window/postMessage">(window.postMessage - Web API | MDN</a>)</p> </blockquote> <p>と書かれている。</p> <p>この「<a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm">the structured clone algorithm</a>」(日本語「<a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Web/API/Web_Workers_API/Structured_clone_algorithm">構造化複製アルゴリズム</a>」)という部分が重要で、この中で「<a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#%E6%A7%8B%E9%80%A0%E5%8C%96%E8%A4%87%E8%A3%BD%E3%81%A7%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%AA%E3%81%84%E3%82%82%E3%81%AE">構造化複製で動作しないもの</a>」というのが示されいる。</p> <blockquote> <ul> <li>Function オブジェクトは構造化複製アルゴリズムでは複製されません。複製しようとすると DATA_CLONE_ERR 例外が送出されます。</li> <li>DOM ノードを複製しようとしても同様に DATA_CLONE_ERR 例外が送出されます。</li> </ul> </blockquote> <p>つまり、例えば<code>document.querySelector()</code>などを使えば要素の参照を取得できるが、このような参照はWeb Messagingで送ることができない。<br /> 実際に<code>window.postMessage</code>でDOMノードを送ろうとすると、</p> <blockquote> <p>Uncaught DOMException: Failed to execute 'postMessage' on 'Window': HTMLButtonElement object could not be cloned.</p> </blockquote> <p>のようなエラーが発生する。</p> <p>ウィンドウ間で互いのDOMの参照はできるのだから、DOMノードも送れるべきである。<br /> そこで、住所のように、テキストでDOMツリーにおけるノードの位置を表現できる方法を探していると、「Xpath」という言語構文を見つけた。</p> <h1 id="Xpathとは"><a href="#Xpath%E3%81%A8%E3%81%AF">Xpathとは</a></h1> <p>Xpathとは、XMLやHTMLのようなツリー状の階層構造を持つ文書で、様々なノードの位置や情報を表すことができる記法のことである。URLのようなパス表記ができることが特徴。</p> <p><a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Introduction_to_using_XPath_in_JavaScript">Introduction to using XPath in JavaScript | MDN</a></p> <p>記法については<a target="_blank" rel="nofollow noopener" href="https://qiita.com/rllllho/items/cb1187cec0fb17fc650a">こちらの記事</a>が詳しいが、ざっくり言うと、例えばbody直下の<code><h1></code>にアクセスするためのXpathは</p> <pre><code>/html/body/h1 </code></pre> <p>となる。</p> <p>また、2番目の<code><div></code>の3番目の<code><span></code>にアクセスするためのXpathは</p> <pre><code>/html/body/div[2]/span[3] </code></pre> <p>といったように表すことができる。</p> <h1 id="要素のXpathを取得して送信する"><a href="#%E8%A6%81%E7%B4%A0%E3%81%AEXpath%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B">要素のXpathを取得して送信する</a></h1> <p>まず、送るためにはDOMノードのXpathを取得する必要がある。<br /> 以下の記事のコードを使用して送信側のスクリプトを書いた。</p> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/narikei/items/fb62b543ca386fcee211">ブラウザ上のクリックした要素のXpathを取得する - Qiita</a></p> <p><strong>parent.htmlのjs</strong></p> <pre><code class="JavaScript"><br />let childWindow = window.open('child.html', 'child', 'width=300,height=400,scrollbars'); // クリックされたらその要素のXpathを子ウィンドウにpostMessageする window.addEventListener('click', (e) => { childWindow.postMessage(getXpath(e.target), 'http://localhost'); }); /* https://qiita.com/narikei/items/fb62b543ca386fcee211 */ function getXpath(element) { if(element && element.parentNode) { var xpath = getXpath(element.parentNode) + '/' + element.tagName; var s = []; for(var i = 0; i < element.parentNode.childNodes.length; i++) { var e = element.parentNode.childNodes[i]; if(e.tagName == element.tagName) { s.push(e); } } if(1 < s.length) { for(var i = 0; i < s.length; i++) { if(s[i] === element) { xpath += '[' + (i+1) + ']'; break; } } } return xpath.toLowerCase(); } else { return ''; } } </code></pre> <h1 id="要素のXpathを受け取って参照する"><a href="#%E8%A6%81%E7%B4%A0%E3%81%AEXpath%E3%82%92%E5%8F%97%E3%81%91%E5%8F%96%E3%81%A3%E3%81%A6%E5%8F%82%E7%85%A7%E3%81%99%E3%82%8B">要素のXpathを受け取って参照する</a></h1> <p>受信側は以下のようになる。</p> <p><strong>child.htmlのjs</strong></p> <pre><code class="JavaScript">let parent = window.opener.document; function receiveMessage(e) { if (e.origin !== "http://localhost") {return} parent.evaluate(e.data, parent, null, XPathResult.FIRST_ORDERED_NODE_TYPE).singleNodeValue.innerHTML = 'ok!'; } window.addEventListener("message", receiveMessage); </code></pre> <p><a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Introduction_to_using_XPath_in_JavaScript">Introduction to using XPath in JavaScript | MDN</a></p> <p>成功すると、親ウィンドウでクリックした要素に「ok!」と表示されるはず。<br /> これで、親ウィンドウから子ウィンドウに送られたXpathを使って、子ウィンドウが親ウィンドウのDOMを参照し、当該要素にアクセスすることが可能になった。もちろんその逆も可能である。</p> ウラル tag:crieit.net,2005:PublicArticle/15907 2020-05-22T10:17:55+09:00 2020-05-22T10:17:55+09:00 https://crieit.net/posts/XPath-2-XPath XPath基礎編(2) ー XPathの書き方 <p>前回の記事では、<a href="https://crieit.net/posts/XPath-1-XPath">XPathの基本概念</a>を簡単に紹介しました。今回はXPathによるWebページ(HTML)からデータを指定・取得する方法、つまりXPathの書き方を紹介します。</p> <h1 id="1.タグ(要素)で指定する"><a href="#1.%E3%82%BF%E3%82%B0%EF%BC%88%E8%A6%81%E7%B4%A0%EF%BC%89%E3%81%A7%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B">1.タグ(要素)で指定する</a></h1> <p>下記のHTMLサンプルで、文章が のように、といった記号で囲まれているのが分かります。このようなといった記号を、タグと言います。</p> <pre><code><タグ名>ここにコンテンツが入ります... </タグ名> </code></pre> <p>最初のタグを「開始タグ」、終わりのタグを「終了タグ」といいます。そしてこの開始タグから終了タグまでの全体を、要素と呼びます。</p> <p>下記のHTMLの中で赤色で表示された部分はタグです。(Firefoxで青色、Chromeでは紫色で表示されます。)<br /> <a href="https://crieit.now.sh/upload_images/ac2152aaa3a20ce773412b967f786c335ec5f9c9b9231.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ac2152aaa3a20ce773412b967f786c335ec5f9c9b9231.png?mw=700" alt="image" /></a></p> <p>下記はHTMLでよく見かけるタグのまとめです。詳しくのは<a target="_blank" rel="nofollow noopener" href="https://www.tagindex.com/html5/elements/">この記事</a>を合わせてご覧ください!<br /> <a href="https://crieit.now.sh/upload_images/3b23cd0e54eb80bd11f5914238779f8b5ec5fa2b21fb0.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3b23cd0e54eb80bd11f5914238779f8b5ec5fa2b21fb0.png?mw=700" alt="image" /></a></p> <p><strong>XPathの最も一般的な書き方は、スラッシュ “/” で区切りながらタグを記述します。</strong></p> <p>例えば、このHTMLから『Harry Potter』を取得したい場合は、ツリー構造の上から順に『htmlタグ→bodyタグ→h1タグ』と指定できます。次のように書きます。</p> <pre><code>/html/body/h1 </code></pre> <p>また、『//』を用いて、途中までのパスを省略することができます。</p> <pre><code>//h1 </code></pre> <p><a href="https://crieit.now.sh/upload_images/73909d4648ca098024e571d5d2c90ada5ec5fa7109dbf.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/73909d4648ca098024e571d5d2c90ada5ec5fa7109dbf.png?mw=700" alt="image" /></a></p> <p>タグを複数に合致する場合に、N番目のタグを指定することができます。この例では、『7,631円』を取得する場合、「div」の行から2行目の「span」であるため、次のように書きます。</p> <pre><code>//div/span[2] </code></pre> <p>抽象化にすると、タグ(要素)で書くXPath構文はこうなります。</p> <pre><code>//タグ名 //タグ名/タグ名 </code></pre> <h1 id="2.属性で指定する"><a href="#2.%E5%B1%9E%E6%80%A7%E3%81%A7%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B">2.属性で指定する</a></h1> <p>属性とはタグの中に記載されていて、タグの情報を細かく表すものです。タグに属性をつけることで、要素の効果を指定したり、具体的な指示を付け加えることが出来ます。属性は通常、「id="booksTitle"」のように表示されます。なお、属性は複数指定する事も可能です。</p> <pre><code><タグ名 属性名="属性値"> </code></pre> <p>最も一般的な属性には、href、title、style、src、id、classなどがあります。詳しくはこの記事を合わせてご覧ください!</p> <p><strong>XPathでは属性を『@』の関数で表します。</strong></p> <p>例えば、『Harry Potter』を取得したい場合、XPathは次のように書きます。</p> <pre><code>//h1[@id="booksTitle"] </code></pre> <p><a href="https://crieit.now.sh/upload_images/74f53e19cdd3d7db9d3aaa665416865e5ec5fa9fbdc81.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/74f53e19cdd3d7db9d3aaa665416865e5ec5fa9fbdc81.png?mw=700" alt="image" /></a></p> <p>抽象化にすると、属性で書くXPath構文はこうなります。</p> <pre><code>//タグ名[@属性名="属性値"] </code></pre> <p>もし同じ属性を持つすべての要素を取得する場合、次のように書きます。</p> <pre><code>//*[@属性名="属性値"] </code></pre> <h1 id="3.テキストで指定する"><a href="#3.%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%A7%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B">3.テキストで指定する</a></h1> <p>下記のようにタグで囲まれているのはテキストです。</p> <pre><code><タグ名>ここにテキストが入ります... </タグ名> </code></pre> <p>Webページからデータを取得するのは、通常ページ内のコンテンツまたはテキストを取得することです。ですから、取得したいテキストを直接指定することができます。</p> <p><strong>XPathではテキストを『text()』の関数で表します。</strong></p> <p>例えば、『Harry Potter』を取得したい場合、テキストで指定すると、次のように書きます。</p> <pre><code>//h1[text()="Harry Potter"] </code></pre> <p><a href="https://crieit.now.sh/upload_images/606ad984d03cb33dbcf324b48fe3ef3a5ec5fae570088.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/606ad984d03cb33dbcf324b48fe3ef3a5ec5fae570088.png?mw=700" alt="image" /></a></p> <p>抽象化にすると、属性で書くXPath構文はこうなります。</p> <pre><code>//タグ名[text()="取得するテキスト"] </code></pre> <p>もし同じテキストを持つすべての要素を取得する場合、次のように書きます。</p> <pre><code>//*[text()="取得するテキスト"] </code></pre> <h1 id="4.タグ関係で指定する"><a href="#4.%E3%82%BF%E3%82%B0%E9%96%A2%E4%BF%82%E3%81%A7%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B">4.タグ関係で指定する</a></h1> <p>HTMLのツリー構造において、すべての要素が親子/兄弟関係を持っています。</p> <p>1つまたは複数の要素を含む要素は親要素と呼ばれ、含まれる要素は子要素です。子要素は1つのみの親があり、親の開始タグと終了タグの間にあります。同じ親を持つ要素は兄弟要素と呼ばれます。</p> <p>具体的な例も見てみましょう。</p> <p>以下のサンプルは、[body]要素を基点に、[body]要素は[h1]要素と[div]要素の親で、[h1]要素と[div]要素は、[body]要素の子です。親子/兄弟関係にある要素を取得し、それぞれにスタイルを変更する例です。</p> <p>[h1]要素と[div]要素は、同じ親[body]要素を持つため、兄弟要素です。</p> <p>また、[div]要素は2つの[span]要素の親ですから、2つの[span]要素は[body]要素の子孫要素です。</p> <p><a href="https://crieit.now.sh/upload_images/ac2152aaa3a20ce773412b967f786c335ec5fb00d4eb2.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ac2152aaa3a20ce773412b967f786c335ec5fb00d4eb2.png?mw=700" alt="image" /></a></p> <p>カレント要素を基点として、親子、もしくは兄弟関係にある要素を取得することができます。例えば、『7,631円』を取得したい場合、タグの関係で指定すると、下記のように書くことができます。</p> <ul> <li><strong>[div]要素の子要素とする場合</strong></li> </ul> <pre><code>//div/span[2] </code></pre> <ul> <li><strong>[body]要素の子孫要素とする場合</strong></li> </ul> <pre><code>//body//span[2] </code></pre> <ul> <li><strong>[span class="author notFaded"]要素の兄弟要素とする場合</strong></li> </ul> <pre><code>//span[@class="author notFaded"]/following-sibling::span[1] </code></pre> <ul> <li><strong>[span class="tax_postage"]要素の兄弟要素とする場合</strong></li> </ul> <pre><code>//span[@class="tax_postage"]/preceding-sibling::span[1] </code></pre> <p>兄弟関係のあるタグを指定するには『following-sibling::』と『preceding-sibling::』という2つの関数をよく使います。</p> <p><strong>『following-sibling::』は、指定された要素より後の兄弟要素を指定する<br /> 『preceding-sibling::』は、指定された要素より前の兄弟要素を指定する</strong></p> <p>『following-sibling::』は、テーブル要素を指定する時に大活躍します。例えば、下記のHTMLサンプルがあります。<br /> <a href="https://crieit.now.sh/upload_images/47e4d5aa57d6e1622c851c7ab7d081235ec5fb78228ea.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/47e4d5aa57d6e1622c851c7ab7d081235ec5fb78228ea.png?mw=700" alt="image" /></a></p> <p>このHTMLはページに変更すると、以下のようなテーブルの形になります。<br /> <a href="https://crieit.now.sh/upload_images/d31f11d0dc981223209a01066480dfcd5ec5fb8c89537.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d31f11d0dc981223209a01066480dfcd5ec5fb8c89537.png?mw=700" alt="image" /></a></p> <p>この例では、店名の『12345』取得します。ただし、[td]要素が複数あり、<strong>//td[1]</strong> で対応できなくなります。また、もし複数のページから、同じ構造のテーブルを一括取得する場合、固定的な値「店名」を基点として、『following-sibling::』を使うほうが薦めです。次のように書きます。</p> <pre><code>//th[text()="店名"]/following-sibling::td[1] </code></pre> <p><a href="https://crieit.now.sh/upload_images/bf91fbab825806d55d50077a1188024a5ec5fb9c4b147.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bf91fbab825806d55d50077a1188024a5ec5fb9c4b147.png?mw=700" alt="image" /></a></p> <p>抽象化にすると、タグ関係で書くXPath構文はこうなります。<br /> <a href="https://crieit.now.sh/upload_images/79fa6ebb0e474fa3720643700236f4145ec5fbb4e1ce5.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/79fa6ebb0e474fa3720643700236f4145ec5fbb4e1ce5.png?mw=700" alt="image" /></a><br /> もし上記の構文で複数に合致する場合に、<strong>[N]</strong> を付けてN番目のタグを指定することができます。</p> <p>いかがでしょうか?以上は最も使われるXPath書き方です。さっそくお試してみてください。次回はXPathによく使われる関数を紹介します。お楽しみに!</p> <p>元記事:<a target="_blank" rel="nofollow noopener" href="https://helpcenter.octoparse.jp/hc/ja/articles/360013122059">https://helpcenter.octoparse.jp/hc/ja/articles/360013122059</a></p> Octoparse Japan tag:crieit.net,2005:PublicArticle/15905 2020-05-21T12:08:13+09:00 2020-05-21T12:08:13+09:00 https://crieit.net/posts/XPath-1-XPath XPath基礎編(1)ー XPathの基本概念 <p>Webサイト上からデータを自動的に取得するには2つの方法があります。1つはPythonなどのプログラミング言語でWebクローラーを作る、もう1つは<a target="_blank" rel="nofollow noopener" href="https://www.octoparse.jp/">Octoparse</a>のような<a target="_blank" rel="nofollow noopener" href="https://www.octoparse.jp/blog/top-30-free-web-scraping-software/">Webスクレイピングツール</a>でデータを取得するのです。しかし、どれにしても、XPathは重要な役割を果たしています。XPathの書き方が分かれば、データをより正しくて効率的に取得できます。</p> <p>それでXPathのシリーズではXPathの基本概念からXPathの書き方、応用まで詳しく紹介したいと思います。</p> <p>この記事では、XPathの基本概念を簡単に紹介します。</p> <h1 id="1. XPathとは?"><a href="#1.+XPath%E3%81%A8%E3%81%AF%EF%BC%9F">1. XPathとは?</a></h1> <p><a target="_blank" rel="nofollow noopener" href="https://www.octoparse.jp/blog/essential-for-web-scraping-xpath-introduction/">XPath</a> (XML Path Language)とは、ツリー構造となっているXML/HTMLドキュメントからの要素や属性値などを指定するための簡潔な構文(言語)です。<br /> Webページは通常HTMLで記述されるから、XPathはWebページの情報を取得する時によく利用します。ブラウザ(Chrome、Firefoxなど)でWebページのHTMLを表示するする場合、F12キーを押すことで、対応するHTMLドキュメントに簡単にアクセスできます。<br /> <a href="https://crieit.now.sh/upload_images/9df9699255a9f1dfaaa6c977dbd9c7f85ec5ef58a99b5.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9df9699255a9f1dfaaa6c977dbd9c7f85ec5ef58a99b5.png?mw=700" alt="image" /></a></p> <h1 id="2. XPathの仕組み"><a href="#2.+XPath%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF">2. XPathの仕組み</a></h1> <p>XPathは具体的にはどのように動作するのかを見てみましょう。下記の画像はHTMLドキュメントの一部です。<br /> <a href="https://crieit.now.sh/upload_images/adab33ab3d7b51a493bb3cfb063f098b5ec5efa851b61.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/adab33ab3d7b51a493bb3cfb063f098b5ec5efa851b61.png?mw=700" alt="image" /></a></p> <p>HTMLは、ツリー構造のように、異なるレベルのがあります。この例では、レベル1は<strong>bookstore</strong>で、レベル2は<br /> <strong>book</strong>です。<strong>Title、author、year、price</strong>はすべてレベル3です。</p> <p>山括弧(など)を含むテキストはタグと呼ばれます。HTMLの要素は通常、開始タグと終了タグで構成され、その間にコンテンツが挿入されます。以下の形になります。</p> <pre><code><○○>(開始タグ)ここにコンテンツが入ります... </○○>(終了タグ) </code></pre> <p>XPathはスラッシュ “/” で区切りながら階層を記述し、基準となるノードから別のノードを指定できます。URLと似ています。この例では、要素「author」を検索する場合、XPathは次のようになります。</p> <pre><code>/bookstore/book/author </code></pre> <p>それがどのように機能するかをよりよく理解するには、コンピューター上の特定のファイルを見つける方法を参照してください。<br /> <a href="https://crieit.now.sh/upload_images/0620d07afe9f4535ee22c558c2a575fb5ec5ef88cc427.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0620d07afe9f4535ee22c558c2a575fb5ec5ef88cc427.png?mw=700" alt="image" /></a></p> <p>「author」という名前のファイルを見つけるには、正しいファイルパスは <strong>\ bookstore \ book \ author</strong>です。</p> <p>コンピューター上のすべてのファイルには独自のパスがあるように、Webページ上の要素もパスがあります。そのパスはXPathで記述されています。</p> <p>ルート要素(ドキュメントの一番上の要素)から始まり、中にあるすべての要素を経由して目標要素に至るXPathは、絶対XPathと呼ばれます。</p> <pre><code>例: /html/body/div/div/div/div/div/div/div/div/div/span/span/span… </code></pre> <p>絶対XPathは長くて混乱する可能性があるため、絶対XPathを単純化するために、「//」を使用して途中までのパスを省略することができます(短いXPathとも呼ばれる)。</p> <p>たとえば、</p> <pre><code>絶対XPath:  /bookstore/book/author 短いXPath:  //author </code></pre> <h1 id="3. XPathを表示・書くには"><a href="#3.+XPath%E3%82%92%E8%A1%A8%E7%A4%BA%E3%83%BB%E6%9B%B8%E3%81%8F%E3%81%AB%E3%81%AF">3. XPathを表示・書くには</a></h1> <h2 id="【Google Chromeの場合】"><a href="#%E3%80%90Google+Chrome%E3%81%AE%E5%A0%B4%E5%90%88%E3%80%91">【Google Chromeの場合】</a></h2> <p>Chromeでこのページを表示し、右クリックメニューの[検証]から開発者ツールを表示します。Elementタブのhtmlで、要素を右クリックします。メニューの[Copy] → [Copy XPath ] でその要素を取得するためのXPathがクリップボードにコピーされます。<br /> <a href="https://crieit.now.sh/upload_images/7abc7bfcf22757417e5d1de2508ecd645ec5efc5ddd9d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7abc7bfcf22757417e5d1de2508ecd645ec5efc5ddd9d.png?mw=700" alt="image" /></a></p> <p>表示されているElementタブのhtmlから “Ctrl + F” で検索欄を表示します。XPathを入力すると、得られる要素が選択されるはずです。<br /> <a href="https://crieit.now.sh/upload_images/26083b025f9b75340b4e0133bc0d3c885ec5efd93cb43.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/26083b025f9b75340b4e0133bc0d3c885ec5efd93cb43.png?mw=700" alt="image" /></a></p> <p>また、「XPath Helper」という拡張機能を追加することもできます。XPathを入力すると、一致する結果が表示されます。(<a target="_blank" rel="nofollow noopener" href="https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl?hl=zh-CN">XPath Helperをインストールする</a>)<br /> <a href="https://crieit.now.sh/upload_images/2a1ec783d7eb286b630a0cec3a3a6a0f5ec5efeb6a203.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2a1ec783d7eb286b630a0cec3a3a6a0f5ec5efeb6a203.png?mw=700" alt="image" /></a></p> <p>​</p> <h2 id="【Firefoxの場合】 "><a href="#%E3%80%90Firefox%E3%81%AE%E5%A0%B4%E5%90%88%E3%80%91%E3%80%80">【Firefoxの場合】 </a></h2> <p>Firefoxの旧バージョンに搭載されている拡張機能「Firebug」が利用できます。(<a target="_blank" rel="nofollow noopener" href="https://helpcenter.octoparse.jp/hc/ja/articles/360015765193-Firebug-FireXPath%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95">Firebug&FireXPath拡張機能をインストールする方法</a>)</p> <p>FirefoxでWebページを開く➡Firebugボタンをクリック➡ページ内の要素をクリック➡その要素のXPathが表示されます。<br /> <a href="https://crieit.now.sh/upload_images/f00ff934aa298fe710ed30ead91c5db95ec5f00a607c0.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f00ff934aa298fe710ed30ead91c5db95ec5f00a607c0.png?mw=700" alt="image" /></a></p> <p>以上はXPathの基本概念でした。次回はXPathの書き方を紹介しますので、お楽しみにしてください!</p> <p>元記事:<a target="_blank" rel="nofollow noopener" href="https://helpcenter.octoparse.jp/hc/ja/articles/360015765513">https://helpcenter.octoparse.jp/hc/ja/articles/360015765513</a></p> Octoparse Japan