【问题标题】:From random to XPath从随机到 XPath
【发布时间】:2020-12-05 04:31:52
【问题描述】:

我有 3 个带有随机函数的随机生成数字

random = random.sample(range(1, 10), 3)
print (random)

Result is: [1, 6, 8]

并且有 XPath 需要从结果中更改每个数字的结果

For 1st number:
'//*[@id="app"]/div/div[3]/div/div[1]/div[1]/div'

For 2nd number:
'//*[@id="app"]/div/div[3]/div/div[1]/div[6]/div'

For 3rd number:
'//*[@id="app"]/div/div[3]/div/div[1]/div[8]/div'

用 for 循环试过了,但没用

for i in random:
    '//*[@id="app"]/div/div[3]/div/div[1]/div['+ i[0] +']/div'

【问题讨论】:

  • 以后,我建议您指定您遇到的实际错误是什么。它使某人更容易提供帮助。例如。在这种情况下,您可以发布 Python 生成的错误消息TypeError: 'int' object is not subscriptable

标签: python for-loop random


【解决方案1】:

在这种情况下,你的循环

for i in random

迭代random 列表中的每个元素。如果您要在循环中打印出i,您会发现它是列表的一个元素,而不是列表本身。因此,像您所做的那样对其进行索引是没有意义的:i[0]

但是,如果您删除索引并仅使用 i,您仍会遇到新错误 - 因为 i 是整数而不是字符串 - 您不能将整数与字符串连接。所以,要纠正这个问题,你应该像这样转换它:str(i) 然后它应该可以工作了。

所以最终的解决方案是:

xpath = '//*[@id="app"]/div/div[3]/div/div[1]/div['+ str(i) +']/div'

替代方案:

您可以使用 Python 3 的 f-strings 来避免字符串连接和类型转换:

xpath = f'//*[@id="app"]/div/div[3]/div/div[1]/div[{i}]/div'

【讨论】:

  • 非常感谢!第一个选项工作。第二个告诉我错误。也许需要''?但这正是我所需要的。谢谢!
  • 不客气。对于第二个版本,这将需要 Python 3.6+ (python.org/dev/peps/pep-0498)——这是目前支持的最旧版本。所以如果你使用的是更低的,你应该升级。
  • 使用 3.9 但不知道为什么不起作用。你能再帮我解决一个问题吗,很简单。所以,有一个输入框有文本,我想改变它但是当调用 driver.find_element_by_xpath('/html/body/div[1]/div/div[3]/form/section/div/div/input' ).clear() 不想删除。如果我从 python shell 尝试相同,它会工作。尝试超时但无法清除。
  • 最好将此作为一个单独的问题提出,因为这已经离题了:stackoverflow.com/help/on-topic
  • 另外,请参阅我对您的问题所做的评论,以提供对遇到的错误的更具体解释。当你说你“不知道为什么不工作”时,很难提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多