Pyt*_*unt -1 python selenium-webdriver
我试过了,
browser.find_element_by_class_name('("my_class")[1]')
browser.find_element_by_class_name('("my_class")[position()=1]')
browser.find_element_by_class_name("my_class")[1]
Run Code Online (Sandbox Code Playgroud)
Jef*_*ffC 10
获得所需内容的简单方法是使用已经在使用的locator方法的复数形式find_elements_by_class_name()。复数形式返回列表,而不仅仅是第一个匹配项,因此在您的情况下,您将使用
find_elements_by_class_name("my_class")[1]
Run Code Online (Sandbox Code Playgroud)
该find_elements_*方法返回一个列表,[1]结尾处的指定仅返回集合中的第二项(索引从0开始)。
我通常不使用,*_by_class_name()因为很少会只找一堂课。我通常至少也要指定标签名称,例如div.my_class。我通常使用的另一个选择是CSS选择器。由于更好的性能,更好的支持等,CSS选择器应该比XPath更可取。*
一个例子
<div class="class1 class2 class3">123</div>
<div class="class2">2</div>
<div class="class3">3</div>
<div class="class1 class2">12</div>
<div class="class1 class3">13</div>
<div class="class1">1</div>
<div class="class2 class3">23</div>
Run Code Online (Sandbox Code Playgroud)
如果您具有上述HTML并想要“ class1”的第二个实例,则可以使用
driver.find_elements_by_css_selector("div.class1")[1]
Run Code Online (Sandbox Code Playgroud)
CSS选择器优于XPath的另一个优点是CSS选择器在元素上的多个类名中查找类名,其中XPath只能进行文本搜索,这可能导致错误或遗漏的匹配项。上面的CSS选择器将返回总共4个元素:“ 123”,“ 12”,“ 13”,“ 1”。索引[1]仅返回第二个实例“ 12”。
如果您使用了DebanjanB建议的XPath,
//*[@class='my_class'][position()=2]
Run Code Online (Sandbox Code Playgroud)
它什么也不会返回。这是因为只有一个元素具有与类完全相同的字符串“ my_class”。它错过了包含但不仅是“ my_class”的所有其他元素。您可以改进它以查找所有内容,但是它仍然具有XPath vs CSS选择器的所有缺点,而且时间更长,依此类推...
有关查找元素的方法的更多信息,请参见Selenium-python文档。
*如果您需要更多详细信息,请点击此处,或者已经查看了许多文章,或者浏览了Selenium Conference YT频道上的视频,并观看Simon Stewart或其他Selenium贡献者的一些主题演讲。
| 归档时间: |
|
| 查看次数: |
232 次 |
| 最近记录: |