使用Selenium Webdriver在元素中查找元素

时间:2017-04-16 19:33:54

标签: python selenium web-scraping webdriver

我正在抓取一个网站,其中包含使用JavaScript生成的足球比赛列表。我写了以下一行,创建了页面上所有游戏元素的列表:

list = browser.find_elements_by_xpath('//*[@data-sportid="1"]')

如果我再写

for game in list:
    print game.text

打印每个游戏中包含的所有文本字段(主队名称,客队名称等)

然而,循环

for game in list:
    print game.find_element_by_xpath('//*[@class="home-team"]').text

在循环的每次迭代中在页面中打印第一个主队的名称。

game.find_element_by_xpath似乎正在搜索整个页面,而不只是这个game元素,因此它会不断返回页面上的第一个主队名称。

如何在列表的每个项目中搜索子元素?

修改

Here is the exact page I am working on

2 个答案:

答案 0 :(得分:3)

driver = webdriver.Chrome()
driver.get("https://www.betfair.com/exchange/football/coupon?id=2")
list = driver.find_elements_by_xpath('//*[@data-sportid="1"]')
for game in list:
    print(game.find_element_by_css_selector('span.home-team').text)

driver = webdriver.Chrome()
driver.get("https://www.betfair.com/exchange/football/coupon?id=2")
list = driver.find_elements_by_xpath('//*[@data-sportid="1"]')
for game in list:
    print(game.find_element_by_xpath('.//span[@class="home-team"]').text)

答案 1 :(得分:2)

这是对Barneys答案的补充说明。

您使用的是xpath //*[@class="home-team"],但是无论您使用的是哪个//父元素,它都会告诉xpath搜索整个文档,而不仅仅是父元素的子元素。
使用带有正斜杠(IE .//*[@class="home-team"])前面的句点的xpath .//,它告诉它仅在当前元素下搜索。

希望这个扩展的解释有助于理解。