如何在selenium python中找到元素

时间:2018-01-13 04:22:34

标签: python selenium-webdriver

我现在一直在使用硒,过去几个小时一直坚持这个问题。这似乎很简单,但我似乎无法弄清楚一个正确的执行。我基本上试图根据用户的输入选择鞋码。以下是我尝试排序的几个按钮以及周围的HTML。

<p class="checkbox-size">
    <input type="radio" value="500" id="super_attribute[150]_500" name="super_attribute[150]" class="product_attribute">
    <label for="super_attribute[150]_500">
        <span id="label_eu0" class="label_hidden"> 38.5</span>
        <span id="label_us0" class="label_show"> 6</span>
        <span id="label_uk0" class="label_hidden"> 5.5</span>
        <span id="label_cm0" class="label_hidden"> 24</span>
    </label>
</p>

我想按的具体按钮就是这个:

<label for="super_attribute[150]_137">
    <span id="label_eu10" class="label_hidden"> 45</span>
    <span id="label_us10" class="label_show"> 11</span>
    <span id="label_uk10" class="label_hidden"> 10</span>
    <span id="label_cm10" class="label_hidden"> 29</span>
</label>

现在我尝试了许多不同的搜索方法,然后单击其中一个按钮,但还没有任何工作。有什么建议?以下是我目前正在尝试查找并单击按钮的内容:

driver.find_element_by_css_selector("input[type='radio'][value='11']").click()

回顾过去,我可能没有为按钮提供正确的代码,所以这里有一个inspect元素的快照以及实际的page,如果你想自己去查看它。我想点击大小按钮。 Button inspect element

解决! 这是我最终使用的代码。

sizes = driver.find_elements_by_class_name('checkbox-size')
for size in sizes:
    if size.text in [usersize]:
        size.click()
        print colored('Carted size %s'%(size.text), 'green')
        break
    continue

3 个答案:

答案 0 :(得分:2)

您的方法存在一些问题。

  1. 当您需要点击INPUT

  2. 时,您正试图点击SPAN
  3. 页面上的大小包含一些空格,这使得严格的字符串比较,值= '11',不起作用。此外,所包含的文字不会被视为value

  4. 您将遇到的另一个问题是未显示所有尺寸。显示的尺寸由尺寸,欧盟,美国,英国和CM以上的链接控制。显示的内容有class="label_show",因此您需要在答案中指定,或者您将尝试单击不可见的元素,这些元素将引发异常。 (硒仅通过设计与可见元素相互作用)。

  5. 有了这一切,我们可以构建以下XPath

    //span[@class='label_show'][normalize-space(.)='10']
    

    如果是我,我会把它放在一个以字符串传递所需大小的函数中,并将该参数插入到上面的XPath中,以使其更加可重用。

答案 1 :(得分:-1)

尝试以下定位器(xpath):

.//span[contains(@id,'label_eu') and text()=' 40']

答案 2 :(得分:-1)

好的,这就是我最终使用的解决问题的方法。我使用类'checkbox-size'制作了所有Web元素的列表,然后遍历该列表以找到正确的大小,然后单击该元素。 这是代码:

    sizes = driver.find_elements_by_class_name('checkbox-size')
for size in sizes:
    if size.text in [usersize]:
        size.click()
        print colored('Carted size %s'%(size.text), 'green')
        break
    continue