使用Selenium python查找行内的其他元素

问题描述 投票:0回答:2

我正在尝试使用python3中的硒来获取表内可用许可证的值。我能够使用XPATH获取值,并遍历每一行。但是XPATH并不理想,因为该表可能会更改并包含其他列,因此将无法获得正确的值。

我想要的值是98,50,等等...

<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上的外观:

“

python-3.x selenium xpath css-selectors webdriverwait
2个回答
0
投票

可能只是:

browser.find_elements_by_css_selector('.licensesUsedValueGrid')

0
投票

要使用SeleniumPython提取所有可用许可证的值,您必须为visibility_of_all_elements_located()引入WebDriverWait,并且可以使用以下任何一个Locator Strategies

  • 使用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
    
© www.soinside.com 2019 - 2024. All rights reserved.