我正在尝试使用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上的外观:
可能只是:
browser.find_elements_by_css_selector('.licensesUsedValueGrid')
要使用Selenium和Python提取所有可用许可证的值,您必须为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