Python:删除重复的代码,以便在Selenium中重复执行操作

时间:2017-12-31 06:03:54

标签: python css selenium

我使用Selenium在Python中工作,必须这样做:

elem = driver.find_element_by_css_selector('#results .page_block_sub_header_count')
elem = driver.find_element_by_css_selector('#results .page_block_sub_header_count')
elem = driver.find_element_by_css_selector('#results .page_block_sub_header_count')
elem = driver.find_element_by_css_selector('#results .page_block_sub_header_count') 

我这样做是因为页面上有4个元素有这个CSS选择器" #results .page_block_sub_header_count"。我希望得到第四个结果。

有没有一种方法可以将其放入代码中?我不想要4条类似的线条。我相信这不是一个很好的代码实践。

3 个答案:

答案 0 :(得分:3)

只需使用find_elements_by_css_selector()(注意“s”)来定位与定位符匹配的多个元素 - 在您的情况下为CSS选择器:

results = driver.find_elements_by_css_selector('#results .page_block_sub_header_count')

results将是 WebElement个实例的列表,您可以对其进行迭代,然后获取文字:

for item in results:
    print(item.text)

答案 1 :(得分:1)

此外,您可以使用以下代码(只是一个案例):

cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

PS:@ alecxe的代码更适合使用。

答案 2 :(得分:1)

如果没有HTML,很难为您提供最合适的解决方案。从我们尝试过的代码中可以看出,您已经使用过:

driver.find_element_by_css_selector('#results .page_block_sub_header_count') 

这实际上意味着nodeid results 至少有 4 子节点class为的 page_block_sub_header_count 即可。因此,为了构建最合适的css_selector,我们错过了有关 tagName 的信息,其中包含可用的课程 page_block_sub_header_count HTML DOM

如果您want to get the result of the 4th one仍然可以使用以下代码行:

elem = driver.find_element_by_css_selector('#results .page_block_sub_header_count:nth-of-type(4)')