【问题标题】:Selenium can't find elements by XPathSelenium 无法通过 XPath 找到元素
【发布时间】:2018-02-28 11:50:46
【问题描述】:

我正在尝试使用 Selenium Chromedriver 从页面中提取一些赔率,因为数据是动态的。 “通过 XPath 查找元素”通常对我来说适用于这类网站,但是这一次,它似乎找不到有问题的元素,也找不到属于显示相关赔率的页面部分的任何元素。

我可能犯了一个简单的错误 - 如果有人有时间查看该页面,我将非常感激! Nordic Bet NHL Odds

driver.get("https://www.nordicbet.com/en/odds#?cat=&reg=&sc=50&bgi=36")
time.sleep(5)
dayElems = driver.find_elements_by_xpath("//div[@class='ng-scope']")
print(len(dayElems))
>>> 0

【问题讨论】:

  • 请阅读为什么是screenshot of HTML or code or error is a bad idea。考虑使用基于格式化文本的相关 HTML、代码试验和错误堆栈跟踪来更新问题。
  • 最好不要使用time.sleep(5),而是等待特定元素出现或纺车消失。 xpath 本身很好,但可能会给出错误的元素。尝试在浏览器中右键单击所需元素并检查它。
  • 我尝试过使用 WebdriverWait(直到 Xpath 出现元素),但它只是超时。似乎 selenium 根本无法访问网站的这一部分。

标签: python selenium selenium-chromedriver chromium


【解决方案1】:

一开始我误会了,对不起, 原来这也是我曾经面临的一个问题.....


它在另一个框架中,id 是 SportsbookIFrame,你需要导航到框架中

In [58]: driver.switch_to_frame("SportsbookIFrame")

In [55]: dayElems = driver.find_elements_by_xpath("//div[@class='ng-scope']")

In [56]: len(dayElems)
Out[56]: 26

对于搜索 iframe,它们是常用元素:

iframes = driver.find_elements_by_xpath("//iframe")

【讨论】:

  • 在这种情况下,有两个元素具有确切的类名“ng-scope”。有时会有三个。它们是父 div,其下包含许多 div,它们看起来像这样:
  • function getElementByXpath(path) { return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; }
  • getElementByXpath("//div[@class='ng-scope']"),虽然可以在chrome控制台中找到
  • 你上面提供的代码中的意思是驱动程序吗? :)
猜你喜欢
  • 2022-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-16
  • 2017-12-12
  • 1970-01-01
  • 2011-11-24
相关资源
最近更新 更多