bugfix> python > 投稿

コーディングとPythonはかなり新しいです、私は find_element_by_xpath を使用しようとしています強調表示されたテキスト "Snoring Chin Strap by TheFamilyMarket" をクリックします 。

   time.sleep(2)
    #btn = br.find_element_by_name("#Anti Snoring Chin Strap Kit")
    # btn = br.find_element_by_link_text('Snoring Chin Strap')

HTMLコード:

<div class="tableD">
   <div class="productDiv" id="productDiv69507">
      <h2 class="productTitle" id="productTitle69507" onclick="goToProduct(7)">Snoring Chin Strap by TheFamilyMarket</h2>
      <img class="productImage" src="https://images-na.ssl-images-amazon.com/images/I/516fC3JruqL.jpg" onclick="goToProduct(7)">
      <hr>
      <h4 class="normalPrice" id="normalPrice7" onclick="goToProduct(7)">Normally: <span class="currency">$  </span>19.99</h4>
      <h4 class="promoPrice" style="margin:2.5px auto;" id="promoPrice69507" onclick="goToProduct(7)">Your Amazon Price: <span class="currency">$  </span>1.99</h4>
      <h3>Your Total:  <span class="currency">$  </span>1.99</h3>
      <p class="clickToViewP" id="cToVP69507" onclick="goToProduct(7)">Click to view and purchase!</p>
   </div>
</div>

回答 2 件
  • br.find_element_by_xpath("//h2[text()='Snoring Chin Strap by TheFamilyMarket']");
    
    

  • XPathはブラウザーから取得できるため、取得が速い場合があり、それが非常に多くの人がXPathを使用している理由です。しかし、長期的には、JavaScriptとCSSセレクターを学ぶことは将来多くの場合に役立ちます。 上記は、すべての h2 を選択することでも実行できます。  要素とプレーンなJavaScriptを使用してテキストを探し、結果をpythonに渡す:

    link_you_search = br.execute_script('''
    links= document.querySelectorAll("h2");
    for (link of links) if (link.textContent.includes("Chin Strap")) return link;
     ''')
    link_you_search.click()
    
    

    または、クラスごとに選択することもできます。

    link_you_search = br.execute_script('''
    links= document.querySelectorAll(".productDiv");
    for (link of links) if (link.textContent.includes("Chin Strap")) return link;
     ''')
    link_you_search.click()
    
    

    要素に id がある場合  通常 id によって選択される属性  最速の検索であり、その id を含む要素は1つだけにする必要があるため、ベストプラクティスです。  そして通常は id s翻訳などの場合はそれほど頻繁に変更しないので、あなたの場合は次のようになります。

    link_you_search = br.find_element_by_id('productTitle69507')
    link_you_search.click()
    
    

あなたの答え