如何在python中使用beautifulsoup查找字符串的第二个匹配项

2021-10-17 14:28:19 发布

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

我有至少两个相同的按钮出现,我想点击一个特定的,这将很可能是第二个按钮。我把这两个钮扣放在同一个身体里

。。。你知道吗

<td><a href="javascript:__doPostBack('ctl00$cph1$grdRfqSearch','Page$21')">...</a></td>

我使用这个python命令来点击按钮,但是我只能得到第一个出现的

  driver.find_element_by_link_text("...").click()

我怎样才能点击第21页?你知道吗

2条回答
网友
1楼 ·

你没有提供足够的信息让我给出一个完整的答案,但是一般来说,你可以用BeautifulSoupfind_all方法在HTML中找到一些特性的多个(或全部)出现。例如

In [61]: html = '<div>hi <a href="https://stackoverflow.com">StackOverflow</a> and
    ...: goodbye <a href="https://google.com">Google</a></div>'

In [62]: soup = BeautifulSoup(html, 'html.parser')

In [63]: soup.find_all('a')
Out[63]:
[<a href="https://stackoverflow.com">StackOverflow</a>,
 <a href="https://google.com">Google</a>]

查看BeautifulSoupdocumentation了解更多信息。值得注意的是,您不仅需要按名称搜索标记,还可以提供任意函数,只要它在给定标记时返回True或False。例如

In [64]: soup.find_all(lambda tag: tag.name == 'a')
Out[64]:
[<a href="https://stackoverflow.com">StackOverflow</a>,
 <a href="https://google.com">Google</a>]

给定一个标记,您可能会发现.has_attr.get方法很有用:

In [71]: soup.find_all(lambda tag: tag.name == 'a' and tag.has_attr('href') and 'st
    ...: ack' in tag.get('href'))
Out[71]: [<a href="https://stackoverflow.com">StackOverflow</a>]

注意,如果为.get提供一个缺少的属性,它将返回None。你知道吗

网友
2楼 ·

尝试将attribute=value css选择器与contains运算符一起使用

driver.find_element_by_css_selector("[href*='Page$21']").click()

相关问题