Найти другой элемент внутри строк, используя селен python - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь получить значения доступной лицензии внутри таблицы, используя селен в python3. Я могу получить значения, используя XPATH, и перебирать каждую строку. Но XPATH не идеален, так как таблица может измениться и включить дополнительный столбец, поэтому не сможет получить правильное значение.

Значения, которые я хочу, это 98,50, et c ...

<div class="slick-cell l6 r6 licensesUsedValueGrid">
 <div class="slick-cell odd" style="padding: 0px;width:100%;height: 44px;">
   <div style="padding: 15% 4px 0px 0%;float: right;">98</div>
 </div>
</div>

<div class="slick-cell l6 r6 licensesUsedValueGrid">
 <div class="slick-cell odd" style="padding: 0px;width:100%;height: 44px;">
  <div style="padding: 15% 4px 0px 0%;float: right;">50</div>
 </div>
</div>

Это использует XPATH, и это сработало:

for i in range(1, rows, 2):

    pak_id = browser.find_element_by_xpath(f'//*[@id="scrollBarDiv"]/div/div[{i}]/div[3]/div/div/div[1]').text

    used_license = browser.find_element_by_xpath(f'//*[@id="scrollBarDiv"]/div/div[{i}]/div[7]/div/div').text
    available_license = browser.find_element_by_xpath(f'//*[@id="scrollBarDiv"]/div/div[{i}]/div[8]/div/div').text

Я хотел бы использовать имя класса или некоторые другие средства, чтобы, даже если они добавят еще один столбец в таблицу, я сможет захватить правильное значение «используемая лицензия» и «доступная лицензия»

Изображение того, как это выглядит на chrome:

https://i.stack.imgur.com/bM30C.png

Ответы [ 2 ]

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

Чтобы извлечь все значения доступных лицензий, используя Selenium и 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.licensesUsedValueGrid>div.slick-cell.odd>div")))])
    
  • Использование XPATH:

    print([my_elem.text for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[contains(@class, 'licensesUsedValueGrid')]/div[@class='slick-cell odd']/div")))])
    
  • Примечание : необходимо добавить следующие операции импорта:

    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

Возможно просто:

browser.find_elements_by_css_selector('.licensesUsedValueGrid')
...