Как найти элементы метки потомка, используя Selenium и Python - PullRequest
0 голосов
/ 09 января 2020

Я использую Selenium python, чтобы попытаться найти всех потомков под первым div, поэтому я использовал этот код:

label_element =driver.find_elements_by_xpath("//div[@style='display:block']/descendant::label")

Но получаю пустой список [].

<div id="coption5" class="copt" style="display: block;">
<div style="height:100%;display:flex;align-items:center;justify-content:center;">
<div class="coptw">
<div style="width:100%;height:49px;border-bottom:1px solid #888">
<b class="cpopdish">SUPREME CALZONE (M)  10.99</b>
<b class="cpopmodifi gray" data-iid="0" style="font-weight: normal;">
<i class="fa fa-comments-o"></i> Special Request</b><b class="cpopprice">10.99</b></div>
<div class="comain" style="right: 0px;">
<div class="crow" grp="0" grpname="">

<label class="label0" cid="5" style="">
<input type="radio" name="0" coname="BF PEPPERONI(M)" sname="" price="0.00" value="2">BF PEPPERONI(M)<b class="ip">0.00</b>
</label>
<label class="label0" cid="5"><input type="radio" name="0" coname="BLACK OLIVES(M)" sname="" price="0.00" value="3">BLACK OLIVES(M)<b class="ip">0.00</b>
</label>
<label class="label0" cid="5"><input type="radio" name="0" coname="CHICKEN(M)" sname="" price="1.00" value="4">CHICKEN(M)<b class="ip">1.00</b>
</label>
<div style="clear:both"></div></div>
</div><a class="ocancel" data-cid="5" data-grps="0"><i class="fa fa-remove"></i> Cancel</a></div></div>

Кто-нибудь из знакомых знает, как использовать селектор Xpath или Css, чтобы найти весь тег метки?

эта первая часть моего кода:

driver.find_elements_by_xpath("//div[@style='display:block']")

Может успешно найти первый элемент div, так что я думаю, что нет ничего плохого в проблемах с видимостью. Тег label находится внутри первого тега div, а label - потомок первого div.

Так что любой друг может помочь?

Ответы [ 2 ]

0 голосов
/ 09 января 2020

Чтобы извлечь все текстовые элементы из <label>, используя Селен и Python, вам нужно вызвать WebDriverWait для visibility_of_all_elements_located(), и вы можно использовать любую из следующих стратегий локатора :

  • Использование CSS_SELECTOR:

    print([my_elem.text for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.copt[id^='coption'] div.comain>div.crow>label")))])
    
  • Использование XPATH:

    print([my_elem.text for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='copt' and starts-with(@id, 'coption')]//div[@class='comain']/div[@class='crow']/label")))])
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 09 января 2020

Вот правильный xpath, который найдет все 3 метки.

//div[@style='display: block;']/descendant::label

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...