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

KOB*_*KOB 4 python selenium webdriver web-scraping

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

list = browser.find_elements_by_xpath('//*[@data-sportid="1"]')
Run Code Online (Sandbox Code Playgroud)

如果我然后写

for game in list:
    print game.text
Run Code Online (Sandbox Code Playgroud)

它会打印每场比赛中包含的所有文本字段(主队名称、客队名称等)

然而,循环

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

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

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

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

编辑

这是我正在处理的确切页面

Bar*_*ney 9

@Justin Bartz 谢谢。

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

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

   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)

or

    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)
Run Code Online (Sandbox Code Playgroud)

  • 我一直在整个互联网上寻找如何解决这个问题。答案是一个“。” 在 xpath 的开头。谢谢巴尼! (2认同)

小智 9

这是为 Barneys 的回答添加解释。

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

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