单击基于部分文本匹配的链接

2024-09-29 21:51:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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()执行时调用?在

使用这个代码有什么缺点吗?在


Tags: 字符串代码dividby链接deflink
1条回答
网友
1楼 · 发布于 2024-09-29 21:51:33

首先,请熟悉Python的生成器,它们是Python库中非常强大的工具。托马斯·伍特斯的一个很好的解释可以从另一个问题中找到:What can you use Python generator functions for?

一旦你读完了,你就会意识到生成器只是让你能够懒洋洋地计算表达式。在

将这段信息与上面的代码关联起来,您会发现a.click()不会立即实际执行,因为您需要迭代生成器表达式,而生成器表达式正是您创建的。这就是为什么必须发出z.next()来实际调用click()方法。在

如果您不想发出z.next(),并且假设您只想单击第一个部分匹配的链接,那么您将按如下方式重新编写上面的代码:

def click_link_partial(div_id, partial):
  linkdiv = driver.find_element_by_id(div_id)
  for a in linkdiv.find_elements_by_tag_name('a'):
      if a.text.startswith(partial):
         a.click()
         break  # stop iterating over the partially matched elements.

但是,如果要单击所有部分链接的元素,则应该从上面的代码中删除z.next(),并返回要在外部函数/方法中使用的生成器表达式。下面是一个例子:

^{pr2}$

希望这有帮助!在

相关问题 更多 >

    热门问题