我有一个像这样返回的元素列表
<selenium.webdriver.remote.webelement.WebElement (session="d3cf9b70-cdc1-11e7-8b3e-570f82e3aaae", element=":wdc:1511161807512")>
<selenium.webdriver.remote.webelement.WebElement (session="d3cf9b70-cdc1-11e7-8b3e-570f82e3aaae", element=":wdc:1511161807513")>
<selenium.webdriver.remote.webelement.WebElement (session="d3cf9b70-cdc1-11e7-8b3e-570f82e3aaae", element=":wdc:1511161807514")>
<selenium.webdriver.remote.webelement.WebElement (session="d3cf9b70-cdc1-11e7-8b3e-570f82e3aaae", element=":wdc:1511161807515")>
我如何收集它们
for comment in driver.find_elements_by_xpath("//*[contains(text(), '')]"):
在元素内部有文字,我可以看到像这样的文本
print(comment.text)
如何在元素列表中找到关键字之前运行循环?
例如,关键字可以是“LakerKobe”。如果它找到带有我设置的关键字文本的元素,我希望循环停止运行。
这是我认为可行的
for comment in driver.find_elements_by_xpath("//*[contains(text(), '')]"):
if 'LakerKobe' in comment.text:
print('found')
然而,这种方法不可靠。它的工作原理和有时它没有。例如,如果你运行这个
keywordMain = 'if you shoot heroin 90% chance your dead already. herion is a different beast'
if 'heroin' in keywordMain:
print('found')
你将看不到任何回复。我使用的是python 3.6
答案 0 :(得分:0)
在收集WebElements
时:
for comment in driver.find_elements_by_xpath("//*[contains(text(), '')]"):
要在其中一个Search Found
包含字符串WebElements
时打印LakerKobe
,您可以使用以下代码块:
for comment in driver.find_elements_by_xpath("//*[contains(text(), '')]"):
if ("LakerKobe" in comment.get_attribute('innerHTML')):
print("Search Found")
作为替代方案,您也可以尝试此选项:
for comment in driver.find_elements_by_xpath("//*[contains(text(), '')]"):
if comment.get_attribute('innerHTML').__contains__('LakerKobe'):
print("Search Found")
答案 1 :(得分:0)
这两个词(for
循环中的“海洛因”和keywordMain
中的“海洛因”)似乎相等,但事实并非如此。试试
[ord(i) for i in "heroin"]
两个单词,你会得到
[104, 101, 114, 111, 105, 110]
和
[104, 101, 114, 111, 105, 110, 239, 187, 191]
适当。您在for
循环中使用的单词中几乎没有额外的ASCII字符。
所以这不是关于Selenium。只需使用完全关键字
即可答案 2 :(得分:0)
尝试打印
print 'heroin'.__repr__() #copy exactly from if condition
print keywordMain[3].__repr__()
#you will see extra characters which is hidden but makes string different.
'heroin\xef\xbb\xbf'
'heroin'
你可以用这个简单的方法摆脱那个角色。
def remove_non_asciis(s):
return "".join(filter(lambda x: ord(x)<128, s))