我有这种情况:
我在一个页面上有多个链接,每个链接都插入一个表中。我提取了一些
html代码:
<td headers="record0_int1">
<a id="ctl00_ContentPlaceHolder1_Primasel2_1_dlstPrimasel_ctl00_PrimoLinkSSel" title="Consulta la scheda dettagliata del bene con codice A241511" href="/secondasel.aspx? id=815300&ida=241511&idp=473762&m=1&t=1">A241511</a>
</td>
<td headers="record1_int1">
<a id="ctl00_ContentPlaceHolder1_Primasel2_1_dlstPrimasel_ctl01_PrimoLinkSSel" title="Consulta la scheda dettagliata del bene con codice A241512" href="/secondasel.aspx? id=815301&ida=241512&idp=473762&m=1&t=1">A241512</a>
</td>
我在寻找什么?
我需要:
1)获取ID ctl00_ContentPlaceHolder1_Primasel2_1_dlstPrimasel_ctl00_PrimoLinkSSel
,其中每个链接的ID仅在一个数字上更改,例如:
first id: ctl00_ContentPlaceHolder1_Primasel2_1_dlstPrimasel_ctl00_PrimoLinkSSel
second id: ctl00_ContentPlaceHolder1_Primasel2_1_dlstPrimasel_ctl01_PrimoLinkSSel
third id: ctl00_ContentPlaceHolder1_Primasel2_1_dlstPrimasel_ctl02_PrimoLinkSSel
and so on
2)对于提取的每个ID,我需要打开href链接,如果可能的话,在新页面上打开!
我从昨天起全力以赴,没有任何好结果:(
谢谢大家的回复;)
答案 0 :(得分:4)
首先,您可以通过基于id的静态部分创建集合来获取所有链接:
links = browser.links(:id => /ctl00_ContentPlaceHolder1_Primasel2_1_dlstPrimasel_ctl\d+_PrimoLinkSSel/)
然后,您可以遍历链接以单击每个链接。您可以像用户一样执行此操作并按住控制按钮以打开新页面:
links.each { |link| link.click(:control) }
或者,您也可以在点击之前为每个链接添加target="_blank"
属性来强制使用新窗口。
links.each do |link|
browser.execute_script('arguments[0].setAttribute("target", "_blank");', link)
link.click
end
对于Firefox,第二种方法似乎更稳定,因为它不依赖于本机事件。
打开页面后,您可以获得一个特定的窗口。例如:
browser.window(:title => 'the window title').use do
puts browser.text
end
你也可以遍历窗口,比如输出每个标题:
browser.windows.each do |window|
window.use do
puts window.title
end
end