如何在跟踪结果顺序的同时合并 WebDriver find_elements_by* 调用?

How to combine WebDriver find_elements_by* calls while keeping track of the order of results?

在典型的 Google 本地搜索结果页面上,例如 this 有 20 个结果:

评论以 'No reviews' 形式给出,可以使用以下方法提取:

driver.find_elements_by_class_name("_Juh")

或:

非零数量的评论,可以使用以下方法提取:

driver.find_elements_by_css_selector("div:nth-child(1) > div:nth-child(1) > span:nth-child(2) > div:nth-child(1) > span:nth-child(1)")

或:

只是括号中的数字,例如(7),可以使用:

提取
driver.find_elements_by_css_selector("div:nth-child(1) > div:nth-child(1) > span:nth-child(2) > div:nth-child(3) > span:nth-child(1)")

因此,我可以提取所有 20 个评论数。 挑战: 我需要能够 (i) 一次提取所有结果,并且 (ii) 跟踪它们在 20 个结果列表中的位置。这是因为我将单击每个结果,从地图窗格中提取一些详细信息,然后将这些与每个结果的评论计数进行核对。如何最好地实现这一目标?

试试下面的方法——它会抓取所有连续的但有星级的!然后应用python清理它们-

我尝试了 this link。

Xpath

//*[@class='_rl']/following-sibling::span[1]

它returns

4.9(7)
3 reviews
3 reviews
4.2(24)
5.0(44)
4.9(16)
4.9(7)
4.7(5)
2 reviews
No reviews
5.0(14)
4.9(9)
4.7(5)
4.3(5)
1 review
4.6(7)
No reviews
4 reviews
2 reviews
4.7(12)

现在应用 python 进行清洁(您按照自己的方式进行 - 这只是测试)-

>>> s = '''4.9(7)
3 reviews
3 reviews
4.2(24)
5.0(44)
4.9(16)
4.9(7)
4.7(5)
2 reviews
No reviews
5.0(14)
4.9(9)
4.7(5)
4.3(5)
1 review
4.6(7)
No reviews
4 reviews
2 reviews
4.7(12)'''
>>> mylist=s.split('\n')
>>> clndlist = [i.split("(")[-1].replace(")","") if "(" in i else i for i in mylist]
>>> clndlist

>>> ['7', '3 reviews', '3 reviews', '24', '44', '16', '7', '5', '2 reviews', 'No reviews', '14', '9', '5', '5', '1 review', '7', 'No reviews', '4 reviews', '2 reviews', '12', '']