我现在一直在使用硒,过去几个小时一直坚持这个问题。这似乎很简单,但我似乎无法弄清楚一个正确的执行。我基本上试图根据用户的输入选择鞋码。以下是我尝试排序的几个按钮以及周围的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
答案 0 :(得分:2)
您的方法存在一些问题。
当您需要点击INPUT
SPAN
页面上的大小包含一些空格,这使得严格的字符串比较,值= '11',不起作用。此外,所包含的文字不会被视为value
。
您将遇到的另一个问题是未显示所有尺寸。显示的尺寸由尺寸,欧盟,美国,英国和CM以上的链接控制。显示的内容有class="label_show"
,因此您需要在答案中指定,或者您将尝试单击不可见的元素,这些元素将引发异常。 (硒仅通过设计与可见元素相互作用)。
有了这一切,我们可以构建以下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