在 selenium 和 python 中获取 class 的值

Getting value of a class in selenium and python

<input id="value(Medications1)_139038" class="medMedications text-field" type="text" style="width:90%" value="Lantus" maxlength="30000" name="value(Medications1)" autocomplete="off"/>

所以有这个页面,其中有文本框,而且这些文本框的数量不固定。其他时候它可能是 20,有时只是 5,它是随机的。那么有没有办法知道页面中有多少个这样的文本框呢?并获取这些文本框的值?

我试过这个:

medicationstextbox_locator = "//*[@class='medMedications text-field ']"
medicationstextbox_locatorTextBox = driver.find_elements_by_xpath(medicationstextbox_locator)

for i in medicationstextbox_locatorTextBox:
    print(i.get_attribute("values"))

这会打印出很多 None

我不明白,因为我访问了它的 class,提取了值,但它 returns None.

如果可能的话,我想避免做:

medications1 = "//input[@name='value(Medications1)']"
medications2 = "//input[@name='value(Medications2)']"

med1textbox = driver.find_element_by_xpath(med1)
med2textbox = driver.find_element_by_xpath(med2)

med1textbox.get_attribute("value")
med2textbox.get_attribute("value")

因为我必须定义每个文本框,并且事先不知道文本框的数量。这样做也需要花费很多时间。那么,我们该如何解决呢?

print(i.get_attribute("values"))

没有 values 属性,因此,您得到的是 None。有 value 属性。

除此之外,您的第一种方法完全有意义并且应该有效。

我们可以让它更简单一点,通过 find_elements_by_css_selector() 使用 "CSS selector":

medications = driver.find_elements_by_css_selector("input.medMedications")

# count
print len(medications)

# values
for medication in medications:
    print medication.get_attribute("value")

或者,您可以检查 id 属性是否包含 Medications:

medications = driver.find_elements_by_css_selector("input[id*=Medications]")

或者,对于 XPath:

medications = driver.find_elements_by_xpath("//input[contains(@id, 'Medications']")