Python:Selenium:find_elements_by_xpath max 10

问题描述 投票:0回答:2

所以,我现在有一段看起来像这样的工作代码;

            if browser.find_elements_by_xpath("//div[contains(@class, 'dealspg_item_cell')]"):
                snipes = browser.find_elements_by_xpath("//div[contains(@class, 'dealspg_item_cell')]")
            else:
                print "Cant find snipes.. Retrying..."
                browser.get("https://www.rolimons.com/deals")
                time.sleep(2)
                print "Reloaded browser... Retrying..."
                if browser.find_elements_by_xpath("//div[contains(@class, 'dealspg_item_cell')]"):
                    snipes = browser.find_elements_by_xpath("//div[contains(@class, 'dealspg_item_cell')]")
                else:
                    print "Shutting down engine..."
                    browser.quit()
                    checking = False
                    print "Restarting script..."
                    break

一切正常。它有60个元素。现在我只需要前10个。我怎么能让它只有find_elements_by_xpath限制为10?

有没有办法做到这一点?

谢谢!

====编辑====

此代码目前需要4秒。我希望通过将最大值设置为10来减少这个时间。

python python-3.x selenium selenium-webdriver selenium-firefoxdriver
2个回答
5
投票

您可以使用:

//[yourXpath]/*[position()<=10]

在你的情况下

//div[contains(@class, 'dealspg_item_cell')]/*[position()<=10]

1
投票

虽然使用xpath是很好的答案。您还可以根据各自的性能引用css选择器。我个人遇到过这样的问题,其中xpath不起作用,但CSS选择器是

div.dealspg_item_cell:nth-child(-1n+10)

解释nth-child(-1n+10)

+10在这里指示节点位置,我们要从第10个节点之前的所有节点中选择元素-1n

让我们说总共有11个元素然后选择会是这样的:

enter image description here

另一个例子是nth-child(1n+10),它表示第10个节点之后的所有其他节点

enter image description here

您可以从here探索更多

© www.soinside.com 2019 - 2024. All rights reserved.