2017-09-07 5 views
0

ノー直接識別子を持つ要素を変更することを望むと言うが、類似したXpathの標的とされることはありません、各ブートストラップで動的に作成:のXpath IDが故に簡単

#js_n6 > div > ul > li:nth-child(4) > a > span > span 

私は喜んで内部にそれを使用しますdocument.querySelector('')しかし、問題がある:

#js_n6 IDは、各ブートストラップで動的に作成される(たびにWebページが形成されるか、または更新され):各では

あなたは別のIDを取得するブートストラップのようなは、,#js_v9,#js z4,#js k1などであり、その他のXpathは同じままである。

IDとして[id^="js"]のようなCSSワイルドカードを使用しようとしましたが、ワイルドカードで見つかった類似のIDを持つ他の以前の要素をターゲットにしているため、効果がないようです。


直接コードの例は、Facebook.comの会話ページです。すべての会話を含むページに移動し、コンソールで実行します。

document.querySelector('.5blh.4-0h').click(); 

次に、モーダルメニューの[削除]ボタンを調べ、Xpathを表示します。次に、リフレッシュしてもう一度表示すると、私は何を意味するかを見ていきます。

これを例として示します。私は誰も掻爬をしないように頼んでいます。私はFacebookについてこれを具体的に尋ねるのではなく、むしろ一般原則を得るようにしています。


この場合、直接IDのないオブジェクトを選択し、動的IDを持つXpathを使用してオブジェクトを選択することができますか?

注:私はサイトを所有していないと、サーバー側からの識別子を追加することはできませんどのような場合には

答えて

0

親要素のCSS IDワイルドカードによる選択の組み合わせが助けになりました。ここで

は私がやったことは基本的です:

1)私は、その親ID(.idElementParent)を持つ要素の要素を選択しました。 2)CSS IDワイルドカードを持つ動的IDの要素を選択しました。 3)私はXpathの関連部分を使用しました。

document.querySelector('.idElementParent > [id^="js"] > div > ul > li:nth-child(4)').someMethod();