Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Join方法组合FirefoxWebElements的文本_Python_Python 3.x_Python 2.7_Selenium Webdriver_Webdriver - Fatal编程技术网

Python 使用Join方法组合FirefoxWebElements的文本

Python 使用Join方法组合FirefoxWebElements的文本,python,python-3.x,python-2.7,selenium-webdriver,webdriver,Python,Python 3.x,Python 2.7,Selenium Webdriver,Webdriver,我是Python新手,所以我希望有人能帮我解决以下问题 project_tags = browser.find_elements_by_xpath('//a[contains(@class, "campaignTags-tag")]') separator = ', ' project_tags = separator.join(project_tags) 我知道如果project\u标记是一个数组,那么join方法就可以工作了。因此,我认为上面的代码可能会起作用,因为project\u ta

我是Python新手,所以我希望有人能帮我解决以下问题

project_tags = browser.find_elements_by_xpath('//a[contains(@class, "campaignTags-tag")]')
separator = ', '
project_tags = separator.join(project_tags)
我知道如果
project\u标记
是一个数组,那么
join
方法就可以工作了。因此,我认为上面的代码可能会起作用,因为
project\u tags
是一个iterable,但当然不是,因为它是
FirefoxWebElements
的iterable

我相信,为了让
join
在这个上下文中工作,我需要做的就是指向每个
FirefoxWebElement
的文本尽管我可以通过其他几种方式实现目标,但我只是好奇这是否可行?

其中一种似乎有些冗长的方式是:

project_tags = browser.find_elements_by_xpath('//a[contains(@class, "campaignTags-tag")]')
for idx, tag in enumerate(project_tags):
    if idx is 0:
        tags_string = tag.text
    else:
        tags_string = tags_string + ', ' + tag.text if idx < len(project_tags) else tags_string + tag.text
project_tags=browser.find_elements_by_xpath('//a[contains(@class,“活动标签”)]))
对于idx,在枚举中标记(项目标记):
如果idx为0:
tags\u string=tag.text
其他:
tags_string=tags_string+','+tag.text如果idx

是否有我可能不知道的方法可以让我重构并最小化上面的工作示例?我相信这正是您想要的:

tags_string = ", ".join([t.text for t in project_tags])
但是,请注意,它在最后两个标记之间包含一个逗号,您的代码没有,我认为这是一个bug。如果没有,您可以使用:

tags_string = ", ".join([t.text for t in project_tags[:-1]]) + project_tags[-1].text

我不会说这是冗长的;我会说它是无效的。@ScottHunter无效,为什么??(顺便说一句,我已经编辑了我的答案并修复了语法错误)你修复了它,并且不得不问为什么?@ScottHunter认为你可能指的是其他东西。。。。。。。。。。。这就是你来这里要说的吗?Lol你可以尝试使用下面的链接,我意识到这是一个bug,但是我很困惑为什么
idx+1
不能正常工作?例如,如果您有一个包含3项的列表,那么第一次迭代将触发if语句的第一个子句,因为
idx
0
;对于第二次迭代,因为
idx+1
2
len(list)
3
,所以应该触发“三元”运算符的前半部分,但它会解析为“三元”运算符的
else
???为什么在上一次迭代中,
idx
=
len(项目标签)-1
,这意味着
idx+1
=
len(项目标签)
,因此
idx+1
是错误的。准确地说。。。这就是我期望发生的事情,但由于某种原因,
idx+1
在最后2次迭代中被解析为false,因此您最终会得到这样的输出:
rock,hip hoprap
oranges,bananasapples
,如果表达式仅在最后一次迭代中为false,则得到的输出,事实上发生了什么?
香蕉
橙子
嘻哈
rap
之间没有逗号,因为
idx+1
对于每个串联过程的最后两个输入都必须解析为false。这就是让我困惑的地方:为什么它在最后两个输入中解析为false,而不仅仅是最后一个输入?