点击python selenium中的正则表达式链接

时间:2010-10-05 16:25:40

标签: python selenium

我一直在四处寻找并试图找到一种方法来点击硒中与正则表达式匹配的链接。

这是有效的代码;

from selenium import selenium
sel = selenium("localhost", 4444, "*chrome", "http://www.ncbi.nlm.nih.gov/")
sel.start()
sel.open('/pubmed')
sel.type("search_term", "20032207[uid]")
sel.click("search")
sel.click("linkout-icon-unknown-vir_full")

但是,如果我搜索不同的ID,则链接文本会有所不同,但它始终与正则表达式linkout-icon[\w-_]*匹配。

但我似乎无法找到正确的命令来点击与正则表达式匹配的链接...我试过了:

sel.click('link=regex:linkout-icon[\w-_]*')
sel.click('regex:linkout-icon[\w-_]*')
sel.click('link=regexp:linkout-icon[\w-_]*')
sel.click('regexp:linkout-icon[\w-_]*')

但他们似乎根本没有工作。有什么建议吗?

编辑:

所以在以下答案中的评论之后:点击的项目实际上是id = linkout-icon-unknown-viro_full的图像。全行如下:

<a href="http://vir.sgmjournals.org/cgi/pmidlookup?view=long&amp;pmid=20032207" ref="PrId=3051&amp;itool=Abstract-def&amp;uid=20032207&amp;nlmid=0077340&amp;db=pubmed&amp;log$=linkouticon" target="_blank"><img alt="Click here to read" id="linkout-icon-unknown-vir_full" border="0" src="http://www.ncbi.nlm.nih.gov/corehtml/query/egifs/http:--highwire.stanford.edu-icons-externalservices-pubmed-standard-vir_full.gif" /></a> </div>

如果您想知道我从Selenium IDE刻录机获得了代码。

3 个答案:

答案 0 :(得分:2)

sel.click可以将XPath作为参数。使用Firebug我找到了(我相信的)XPath到“linkout-icon-unknown-vir_full”链接:

sel.click("//*[@id='linkout-icon-unknown-vir_full']")

使用上面的命令将我带到this page


我无法让matches工作 - 我不知道为什么 - 但这似乎可以使用contains

sel = selenium.selenium("localhost", 4444, "*firefox", "http://www.ncbi.nlm.nih.gov/")
sel.start()
sel.open('/pubmed')
sel.type("search_term", "20032207[uid]")
sel.click("search")
sel.wait_for_page_to_load(30000)
sel.click("//*[contains(@id,'linkout')]")

答案 1 :(得分:0)

我认为你很亲密。首先,regexp:是用于表示要使用正则表达式的正确文本模式。

可能不太正确的另一件事是说link=,因为它指的是链接的文本,即:

<a href="path/to/mylink">Text of the link, this is what will be searched</a>

那么你想要使用正则表达式的什么部分,href?

可能导致正确答案的是:selenium: Is it possible to use the regexp in selenium locators

也许可以将get函数重新用于搜索正则表达式的所有a.href属性,然后返回每个属性的XPath,然后将其输入click()

答案 2 :(得分:0)

在做了一些黑客攻击后,我想出了可能是最愚蠢的方法,但它有效,直到有人能给我一个更好的答案:

import re
val = re.findall('linkout-icon-unknown[\w-]*', sel.get_html_source())[0]
sel.click(val)

它要求我搜索整个html,如果设计发生变化,可能会出现问题。

我希望看到更强大的方法。