在网页中,我有n个链接,即显示的链接是随机的,可能有一个链接或有五个链接。我已经编写了代码,可以在新标签页中打开第一个链接并执行某些功能。问题是,如果有更多链接,我不怎么做。是否可以迭代或以其他任何方式处理此问题
Changerequest是网页中存在的链接
Sourcecontrol = driver.find_element_by_xpath('//li[@class="menu-item"]/a[contains(.,"Source Control")]')
Sourcecontrol.click();
Changerequest=driver.find_element_by_xpath( '//td[@class="confluenceTd"]/a[contains(.,"Change: ")]');
testvalue = Changerequest.get_attribute('href')
driver.execute_script("window.open(arguments[0])",testvalue)
window_after = driver.window_handles[1]
driver.switch_to_window(window_after)
链接的HTML示例
<div class="flooded">
<div class="table-wrap">
<table class="confluenceTable"><tbody>
<tr>
<td class="confluenceTd"><a href="link" class="external-link" rel="nofollow" title="Follow link">Change: 1111</a></td>
<td class="confluenceTd">date</td>
</tr>
<tr>
<td class="confluenceTd"><a href="Link" rel="nofollow" title="Follow link">Change: 2222</a></td>
<td class="confluenceTd">date</td>
</tr>
<tr>
<td class="confluenceTd"><a href="link" class="external-link" rel="nofollow" title="Follow link">Change: 33333</a></td>
<td class="confluenceTd">date</td>
</tr>
<tr>
<td class="confluenceTd"><a href="link" class="external-link" rel="nofollow" title="Follow link">Change: 44444</a></td>
<td class="confluenceTd">date</td>
</tr>
</tbody></table>
</div>
</div>
答案 0 :(得分:1)
尝试以下代码。
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("url")
for item in driver.find_elements_by_css_selector('td.confluenceTd a'):
link = item.get_attribute('href')
window_before = driver.window_handles[0]
driver.execute_script("window.open(arguments[0])",link)
window_after = driver.window_handles[-1]
driver.switch_to.window(window_after)
#Perform some action
#
print(driver.current_url)
#
driver.switch_to.window(window_before)
for item in driver.find_elements_by_xpath("//td[@class='confluenceTd']//a[contains(.,'Change:')]"):
link = item.get_attribute('href')
window_before = driver.window_handles[0]
driver.execute_script("window.open(arguments[0])",link)
window_after = driver.window_handles[-1]
driver.switch_to.window(window_after)
#Perform some action
#
print(driver.current_url)
#
driver.switch_to.window(window_before)
答案 1 :(得分:0)
您可以将find_elements
与s
一起使用以获取所有元素...
您的循环应类似于:
for i in driver.find_elements_by_xpath( '//td[@class="confluenceTd"]/a'):
testvalue = i.get_attribute('href')
driver.execute_script("window.open(arguments[0])",testvalue)
window_after = driver.window_handles[-1]
driver.switch_to_window(window_after)
# do something...
driver.switch_to.default_content()