【セレン】位置決め方法

1. ID に基づいて検索します。

Baidu Web サイトのホームページを例に挙げると、F12 キーを押して開発者ツールを開き、ページ要素の情報を表示します。

<!-- 百度主页下的搜索输入框html结构 -->
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
driver.find_element(By.ID, "kw")

2. 名前による位置付け

driver.find_element(By.NAME, "wd")

3、クラスの位置付けに応じて

driver.find_element(By.CLASS_NAME, "s_ipt")

class 属性の値にスペースが含まれている場合、クラスの配置を使用するとエラーが報告されます。

4. tag_name に応じた配置

tag はタグであり、tag_name は html 内のタグ名によって配置されます。通常、ページ内のタグは一意ではなく、tag_name だけでは正確な位置決めを行うことができません。

# 找出所有input标签
tag_input = driver.find_elements(By.TAG_NAME, "input")
    for i in tag_input:
        # 找出input标签中id属性是kw的
        if i.get_attribute('id') == 'kw':
        # 执行需要的动作
        i.send_keys("tag定位")

5. link_text に従った配置

<!-- 百度主页下的hao123链接的html结构 -->
<a href="https://www.hao123.com?src=from_pc_logon" target="_blank" class="mnav c-font-normal c-color-t">hao123</a>

link_text とpartial_link_text は、<a> タグ内のテキストを見つけます。

link_text は完全に一致します。

driver.find_element(By.LINK_TEXT, "hao123")

6.partial_link_textによる位置決め

Partial_link_text はあいまい一致です。

driver.find_element(By.PARTIAL_LINK_TEXT, "hao")

7. css_selectorによる配置

css_selector の配置は、ID セレクター、クラス セレクター、ラベル セレクター、属性セレクターに細分化できます。

これは、Baidu ホームページの検索入力ボックスの例でもあります。

1. IDセレクター

driver.find_element(By.CSS_SELECTOR, "#kw")

2. クラスセレクター

driver.find_element(By.CSS_SELECTOR, ".s_ipt")

class 属性の値にスペースが含まれる場合は、各スペースの前に「.」を追加します。

driver.find_element(By.CSS_SELECTOR, ".bg.s_btn")

3. ラベルセレクター

driver.find_element(By.CSS_SELECTOR, "input")

4. 属性セレクター

driver.find_element(By.CSS_SELECTOR, "[id='kw']")

5. 一般的に使用される CSS セレクター

セレクタ 説明例
。クラス .s_ipt class="s_ipt" の要素を選択します
#id #kw id="kw" の要素を選択します
* ^ $

クラス*="ip"

クラス^="s_"

クラス$="pt"

ipを含むクラス要素を選択/s_kで始まる/ptで終わる
エレメント p すべての <p> 要素を選択します
要素、要素 ディビジョン、p すべての <div> 要素とすべての <p> 要素を選択します
要素要素 ディビジョンp <div> の子孫を選択 <p>
要素>要素 div>p <div> 子要素 <p> を選択します
要素+要素 div+p <div> の直後にある兄弟要素 <p> を選択します。
要素~要素 分割~P <div> の後のすべての兄弟要素 <p> を選択します
[属性] [目標] ターゲット属性を持つ要素を選択する
[属性=値] [ターゲット = "_blank"] ターゲット属性が _blank である要素を選択します
:n番目の子(n)

p:n番目の子(2)

p:nth-last-child(2)

親の最後から 2 番目の子である <p> 要素を選択します

論理的な位置付け

通常、セレクターは、接続に論理演算子を使用せずに組み合わせて使用​​できます。

「タグ名[属性1=属性値][属性2=属性値]」。

# 选择id属性为kw并且name属性为wd同时class属性为s_ipt的input元素
driver.find_element(By.CSS_SELECTOR, "input[id = 'kw'][name = 'wd'].s_ipt")

n 番目の子(n) と n 番目の最後の子(n)

(逆数の) n 番目の子要素を見つけます。は、このタグの n 番目ではなく、すべての子要素の n 番目です。位置がラベルと一致しない場合、位置を特定することはできません。

# 选择父元素class属性为s-top-left-new s-isindex-wrap的第二个子元素a
driver.find_element(By.CSS_SELECTOR, "[class='s-top-left-new s-isindex-wrap']>a:nth-child(2)")

8、xpath の配置による

1. 絶対パス

HTML ルート ノードからレイヤーごとに検索すると、パスは一意になります。ページのコード構造がわずかに変更されただけであっても、元の有効な xpath 位置決め式が失敗する可能性があります。一般的には推奨されません。

driver.find_element(By.XPATH, '/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input')

2. 相対パス

HTML ページ全体の位置に関係なく、現在のノードから検索します。通常、ページ構造の変更による影響は受けません。

driver.find_element(By.XPATH, "//*[@id='kw']")

3. 共通の xpath

表現 説明
/ ルート ノードから選択します (子ノードを取得します)。単純に絶対パスとして理解されます。 /html/body/div[1]/div[1]
// 位置に関係なく、選択内容に一致する現在のノードからドキュメント内のノードを選択します (子孫を取得します)。単に相対パスとして理解されます。 //入力/div//スパン
現在のノードを選択します。  
.. 現在のノードの親ノードを選択します。 //入力/.. 
@ プロパティを選択します。 //@lang
* 任意のノードまたは任意の属性を表すワイルドカード //*

属性の配置

属性名「//ラベル名[@attribute='属性値']」で直接検索します。

driver.find_element(By.XPATH, "//input[@name='wd']")

文章()

ラベル内のテキストの配置により、「//ラベル名[text()='テキストコンテンツ']」となります。

driver.find_element(By.XPATH, "//a[text()='hao123']")

を含む()

ファジー配置。属性の値の一部を使用して配置します。

"//ラベル名 [contains(@attribute, '属性値')]", "//ラベル名 [contains(text(), 'テキストコンテンツ')]"

# 都是定位到百度主页下的hao123
driver.find_element(By.XPATH, "//a[contains(@href, 'src=from_pc')]")
driver.find_element(By.XPATH, "//a[contains(text(), 'hao')]")

論理的な位置付け

複数の属性タグでターゲットを設定します。連結には論理演算子「and、or、not」を使用します。

"//タグ名[@attribute='属性値'および/または@attribute='属性値']", "//タグ名[not(@attribute='属性値')]"

# 都是定位到百度主页下的搜索输入框
driver.find_element(By.XPATH, "//input[@id='kw' or @name='wd']")
driver.find_element(By.XPATH, "//input[not(@id='xx') and @name='wd']")

位置()

親要素のすべての子要素に配置されるラベルの位置を選択します。(逆数。

「タグ名[n]」、「タグ名[last()-n]」、「タグ名[position()=n]」。last() は最後のもので、last()-1 は最後から 2 番目のものです。

Position() 最初の 2 つと比較すると、最初のいくつかまたは最後のいくつかの範囲の位置決めに「<、>」などの記号を使用できます。

# 都是定位到百度主页下的hao123
driver.find_element(By.XPATH, "//div[@id='s-top-left']/a[2]")
driver.find_element(By.XPATH, "//div[@id='s-top-left']/a[last()-5]")
driver.find_element(By.XPATH, "//div[@id='s-top-left']/a[position()=2]")

 

 

おすすめ

転載: blog.csdn.net/Yocczy/article/details/129616199
おすすめ