带有 Firefox Web 驱动程序的 Selenium 无法通过 Python 代码找到元素
Posted
技术标签:
【中文标题】带有 Firefox Web 驱动程序的 Selenium 无法通过 Python 代码找到元素【英文标题】:Selenium with Firefox web driver can not find elements by Python code 【发布时间】:2018-03-05 10:50:12 【问题描述】:我使用 Firefox 网络驱动程序找不到元素,它打印 0:
driver = webdriver.Firefox()
driver.get("https://www.unibet.ro/betting#filter/football")
event = driver.find_elements_by_class_name('KambiBC-event-item KambiBC-event-item--type-match')
print (len(event))
但是当我将网络驱动程序更改为 Edge:driver = webdriver.Edge()
时它会起作用,因为我还在我的路径环境中设置了边缘网络驱动程序,打印适量的网络元素
【问题讨论】:
请把相关的html代码放在这里,我在页面源代码中找不到任何与'KambiBC-event-item'相关的字符串。您是否提供了正确的步骤来导航到问题页面。 @yongi 不知道如何在不复制这些元素中的所有内容的情况下复制 html 代码,所以我制作了一个打印屏幕, 试试 driver.find_elements_by_css_selector('li.KambiBC-event-item') 我通过 className 尝试使用 selenium javascript 客户端 API,效果很好。所以我认为根本原因不是来自 find_elements_by_class_name() ,您是否尝试在调用 driver.find_elements_by_class_name() 之前添加一些睡眠,我注意到您的网站加载有点慢。 @young 实际上代码在一个循环中,所以如果它第一次没有找到任何东西,第二次,我从 mozzila 网页上读到的是我需要 selenium 3.5 及更高版本和 firefox版本 55 及更高版本,我的 selenium 版本是 3.4.3,但是当我尝试升级它时,我收到一条消息说我是最新的:C:\Users\dariu>pip install -U selenium Requirement already up-to-date: selenium in c:\users\dariu\appdata\local\programs\python\python36-32\lib\site-packages
【参考方案1】:
看起来您要查找的元素是用两个类定义的(KambiBC-event-item
和 KambiBC-event-item--type-match
)。
我相信 driver.find_elements_by_class_name()
需要一个类名作为参数,因此它不适用于您的情况。
您可以尝试使用find_elements_by_xpath()
方法,如下所示(请将xpath 中的//*
替换为适当的元素标签名称):
event = driver.find_elements_by_xpath("//*[@class='KambiBC-event-item KambiBC-event-item--type-match']")
【讨论】:
这就是我在网站上的呈现方式:<li class="KambiBC-event-item KambiBC-event-item--type-match">
,我会尝试使用find_elements_by_xpath()
,但我不会切换到firefox,只要这个简单的东西会给我错误
这不是 FF 的问题。您的 Web 元素 () 在其“类”属性中有多个类名。不确定它在 Edge 中是如何工作的,但如果你也尝试在 Chrome 上运行你的代码,由于同样的原因,它不会工作。 (抛出的异常清除提到不允许复合类 - selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: Compound class names not permitted
)。如果您想通过提到的属性找到这些元素,我建议使用备用定位器策略(如 xpath、css 选择器)。 HTH。以上是关于带有 Firefox Web 驱动程序的 Selenium 无法通过 Python 代码找到元素的主要内容,如果未能解决你的问题,请参考以下文章
SessionNotCreatedException:无法创建新服务:Ubuntu 上带有 Selenium Grid 的 GeckoDriverService 无法驱动 Firefox
SignalR - 在 Chrome/Firefox 中始终降级为服务器发送事件
Selenium Web 驱动程序无法与 Firefox 连接