【问题标题】:Getting block information获取区块信息
【发布时间】:2017-12-06 00:54:30
【问题描述】:

我需要计算网站页面上的 li 元素。元素可见且不在框架中。

html代码是:

<ul class='uiList _10-2x _6kg'>
<li class='_10-5x'>...</li>
<li class=''>...</li>

结束等

我尝试使用以下方法查找元素:

xpath: count=len(browser.find_elements.by_xpath("//ul[@class='uiList _10-2x _6kg']/li"))

它有效,但我什么也没得到 - [ ](没有 len)和 0 和 len

类名:

browser.find_element_by_class_name("uiList _10-2x _6kg")
count = browser.find_elements_by_tag_name('li')
len(count)

这里 - 找不到类名

使用 li 类:

len(browser.find_elements_by_class('_10-5x')

空结果 - [ ] 与 Xpath 相同

css_selector:选择器不是永久性的,会随着页面刷新而改变。

我错了吗?或者有其他方法可以做到吗?

【问题讨论】:

  • 你能根据你的浏览器调试模式显示真正所需元素的完整xpath实际上是什么(在Firefox或Chrome中按F12键,它将启动调试模式) ?

标签: python selenium web-scraping


【解决方案1】:

根据提供的HTML 代码,我看不到ulclass="ul class",但ulclass="uiList _10-2x _6kg"

您可以尝试指定确切的类名值:

len(browser.find_elements_by_css_selector('ul.uiList._10-2x._6kg>li'))

或通过部分类名:

len(browser.find_elements_by_xpath('//ul[starts-with(@class,"uiList")]/li'))

还要注意,目标列表可以动态生成,所以你可以添加一些explicit wait

from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

len(wait(browser, 10).until(EC.presence_of_all_elements_located((By.XPATH, '//ul[starts-with(@class,"uiList")]/li'))))

【讨论】:

    猜你喜欢
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2013-03-17
    • 2023-03-23
    相关资源
    最近更新 更多