【问题标题】:TypeError: slice indices must be integers or None or have an __index__ method pythonTypeError:切片索引必须是整数或无或具有 __index__ 方法 python
【发布时间】:2018-06-06 01:12:10
【问题描述】:

为什么会这样:

k = driver.find_elements_by_class_name("#mw-content-text > div > p:nth-child(3) > b:nth-child(1)")[0:6]

工作

但是

wiki 的第 6 号(又名titles.text)给出

k = driver.find_elements_by_class_name("#mw-content-text > div > p:nth-child(3) > b:nth-child(1)")[0:titles.text]

错误:

TypeError: slice indices must be integers or None or have an __index__ method

我该如何解决这个问题?为什么会这样

代码

cd = webdriver.chrome()
cd.get('https://en.wikipedia.org/wiki/6')
titles = driver.find_elements_by_class_name("#mw-content-text > div > p:nth-child(3) > b:nth-child(1)")
for title in titles:
    print(title.text)

将其更改为 int(titles.text) 可以打印所有元素

【问题讨论】:

  • 你认为故障线路应该怎么做?
  • @MichaelButscher 我希望它能像工作示例一样抓取 6 个元素
  • titles.text 是一个字符串。它是否包含'6'?如果是这样,请使用int(titles.text)
  • @MichaelButscher ValueError: int() 基数为 10 的无效文字:'1 of 6'
  • 所以titles.text 不包含'6'。为什么你认为titles.text 的内容应该以某种方式表示6

标签: python selenium slice


【解决方案1】:

根据 cmets,看起来 titles.text 的值首先是一个字符串(因此不能用作切片索引)并且等于 1 of 6 这意味着您不会可以直接传给int()进行转换。

如果你想从字符串中提取那个6,你可以先把字符串用of分割,然后得到最后一个元素。然后,您需要将其转换为整数:

max_pages = int(titles.text.split(" of ")[-1])

k = driver.find_elements_by_class_name("#mw-content-text > div > p:nth-child(3) > b:nth-child(1)")[:max_pages]

【讨论】:

    猜你喜欢
    • 2020-07-01
    • 2017-07-27
    • 2015-04-01
    • 2017-10-16
    • 2018-09-21
    • 1970-01-01
    • 2021-08-21
    • 2022-08-11
    • 1970-01-01
    相关资源
    最近更新 更多