2016-09-17 7 views
0

私はサイト上で退色していない要素を見つけてクリックする単純なpythonスクリプトを作ろうとしています。クラス/ xpath/cssで検索すると、Seleniumが間違った要素を返します

マイコード:

from selenium import webdriver 
ffprofile = webdriver.FirefoxProfile(r"C:/Users/Dan/AppData/Roaming/Mozilla/Firefox/Profiles/q3fhuchn.QAtest") 
driver = webdriver.Firefox(ffprofile) 

driver.get("https://www.steamgifts.com/giveaways/search?page=1&type=wishlist") 
element = driver.find_element_by_class_name("giveaway__row-inner-wrap") 
element.find_element_by_class_name("giveaway__heading__name").click() 

このスクリプトでは、セレンは、類似したクラス名と間違った要素を返します - 「giveaway__row-インナーラップは、色あせています」。

私はxpathとcssセレクタを試しましたが、結果は同じでした。 Seleniumは正確なクラス名ではなく、検索クエリを含むものを検索します。

また、スクリプトは次の式で正常に動作します:

driver.find_element_by_xpath("//div[@class='giveaway__row-in‌​ner-wrap']//a[@class‌​='giveaway__heading_‌​_name']").click() 

しかし、私はそれらを反復処理することができるように、すべての要素のリストを必要とします。ここで

は、HTML要素の両方のタイプの例である:

<div class="giveaway__row-outer-wrap" data-game-id="707524220"> 
     <div class="giveaway__row-inner-wrap is-faded"> 
      <div class="giveaway__summary"> 
       <h2 class="giveaway__heading"> 
        <a class="giveaway__heading__name" href="/giveaway/FFdQd/call-of-duty-black-ops-iii-multiplayer-starter-pack">Call of Duty: Black Ops III - Multiplaye...</a><span class="giveaway__heading__thin">(15P)</span><a class="giveaway__icon" rel="nofollow" target="_blank" href="http://store.steampowered.com/app/437350/"><i class="fa fa-steam"></i></a><i data-popup="popup--hide-games" class="giveaway__icon giveaway__hide trigger-popup fa fa-eye-slash"></i> 
       </h2> 
       <div class="giveaway__columns"> 
        <div><i class="fa fa-clock-o"></i> <span title="Tomorrow, 4:59am">7 hours remaining</span></div><div class="giveaway__column--width-fill text-right"><span title="September 12, 2016, 4:01am">5 days ago</span> by <a class="giveaway__username" href="/user/Clockknight">Clockknight</a></div></div> 
        <div class="giveaway__links"> 
         <a href="/giveaway/FFdQd/call-of-duty-black-ops-iii-multiplayer-starter-pack/entries"><i class="fa fa-tag"></i> <span>2,552 entries</span></a> 
         <a href="/giveaway/FFdQd/call-of-duty-black-ops-iii-multiplayer-starter-pack/comments"><i class="fa fa-comment"></i> <span>25 comments</span></a> 
        </div> 
       </div><a href="/user/Clockknight" class="global__image-outer-wrap global__image-outer-wrap--avatar-small"><div class="global__image-inner-wrap" style="background-image:url(https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/51/5127d377a5bb8ee65356bcd81e44873824a2e7b5_medium.jpg);"></div></a><a class="global__image-outer-wrap global__image-outer-wrap--game-medium" href="/giveaway/FFdQd/call-of-duty-black-ops-iii-multiplayer-starter-pack"><div class="global__image-inner-wrap" style="background-image:url(https://steamcdn-a.akamaihd.net/steam/apps/437350/capsule_184x69.jpg);"></div> 
      </a> 
     </div> 
    </div> 
    <div class="giveaway__row-outer-wrap" data-game-id="8668"> 
     <div class="giveaway__row-inner-wrap"> 
      <div class="giveaway__summary"> 
       <h2 class="giveaway__heading"> 
        <a class="giveaway__heading__name" href="/giveaway/MsP6N/chaos-on-deponia">Chaos on Deponia</a><span class="giveaway__heading__thin">(100P)</span><a class="giveaway__icon" rel="nofollow" target="_blank" href="http://store.steampowered.com/app/220740/"><i class="fa fa-steam"></i></a><i data-popup="popup--hide-games" class="giveaway__icon giveaway__hide trigger-popup fa fa-eye-slash"></i> 
       </h2> 
       <div class="giveaway__columns"> 
        <div><i class="fa fa-clock-o"></i> <span title="Tomorrow, 7:00am">9 hours remaining</span></div><div class="giveaway__column--width-fill text-right"><span title="Today, 5:03pm">4 hours ago</span> by <a class="giveaway__username" href="/user/JsxfT">JsxfT</a></div></div> 
        <div class="giveaway__links"> 
         <a href="/giveaway/MsP6N/chaos-on-deponia/entries"><i class="fa fa-tag"></i> <span>84 entries</span></a> 
         <a href="/giveaway/MsP6N/chaos-on-deponia/comments"><i class="fa fa-comment"></i> <span>0 comments</span></a> 
        </div> 
       </div><a href="/user/JsxfT" class="global__image-outer-wrap global__image-outer-wrap--avatar-small"><div class="global__image-inner-wrap" style="background-image:url(https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/90/90b441d2627716a1a4c6be1f8fb375bea590c763_medium.jpg);"></div></a><a class="global__image-outer-wrap global__image-outer-wrap--game-medium" href="/giveaway/MsP6N/chaos-on-deponia"><div class="global__image-inner-wrap" style="background-image:url(https://steamcdn-a.akamaihd.net/steam/apps/220740/capsule_184x69.jpg);"></div> 
      </a> 
     </div> 
    </div> 

誰かがこれで私を助けることができる場合、私は感謝されるだろう!

答えて

0

あなたが見ている何が正しいです。要素

<div class="giveaway__row-inner-wrap is-faded"> 

は、実際には2つのクラスがあります。giveaway__row-inner-wrapis-fadedは、したがって、それはセレンがそれを返すことが正しいのです。私はあなたがそのリストに2つの要素を持っていると思う、あなたはそれを繰り返す必要があり、ではない1つの要素を見つける必要がありますis-fadedクラスを持っていますクラス。

+0

感謝を!これは問題のように見えます。以前はうまくいっていたのは奇妙ですが、コード内の「ぼんやりした」クラスを持つ要素を除外するコードを書き直す必要があるようです。 – dandepeched

+0

このような 'div'が1つしかなかったか、または何らかの理由でリストの最初のものとして返されたため、以前は動作していた可能性があります。 – CyberDude

+0

このスクリプトは、以前は次の式で動作していました - ** driver.find_element_by_xpath( "// div [@ class = 'giveaway__row-inner-wrap'] // [@ class = 'giveaway__heading__name'])。 ()**それは今でもうまくいきます。なぜそれが退色していない要素だけを選択するのか知っていますか? – dandepeched

0

あなたはXPathを使用して必要な要素をクリックしようとすることができます:

driver.find_element_by_xpath('//a[@class="giveaway__heading__name"]').click() 
0

私はなぜ知らないが、この文字列は私のシナリオのために完璧に動作し、私は非色あせた要素のリストを作成するために使用します。

elements = driver.find_elements_by_xpath("//div[@class='giveaway__row-inner-wrap']//a[@class='giveaway__heading__name']") 
elements[x].click() 
関連する問題