如何通过Selenium / python中的链接进行迭代

时间:2019-07-30 12:38:36

标签: python-3.x selenium selenium-webdriver

在网页中,我有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>

2 个答案:

答案 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)

OR

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_elementss一起使用以获取所有元素...

您的循环应类似于:

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()