我在python中使用selenium2/Webdriver,我想单击第一个以字符串开头的链接。下面是我想出的代码:
def click_link_partial(div_id, partial):
linkdiv = driver.find_element_by_id(div_id)
z = (a.click() for a in linkdiv.find_elements_by_tag_name('a') if a.text.startswith(partial))
z.next()
我不太熟悉Python中的生成器。为什么不立即调用a.click()而不是在z.next()执行时调用?在
使用这个代码有什么缺点吗?在
首先,请熟悉Python的生成器,它们是Python库中非常强大的工具。托马斯·伍特斯的一个很好的解释可以从另一个问题中找到:What can you use Python generator functions for?
一旦你读完了,你就会意识到生成器只是让你能够懒洋洋地计算表达式。在
将这段信息与上面的代码关联起来,您会发现
a.click()
不会立即实际执行,因为您需要迭代生成器表达式,而生成器表达式正是您创建的。这就是为什么必须发出z.next()
来实际调用click()
方法。在如果您不想发出
z.next()
,并且假设您只想单击第一个部分匹配的链接,那么您将按如下方式重新编写上面的代码:但是,如果要单击所有部分链接的元素,则应该从上面的代码中删除
^{pr2}$z.next()
,并返回要在外部函数/方法中使用的生成器表达式。下面是一个例子:希望这有帮助!在
相关问题 更多 >
编程相关推荐