Python selenium как скачать конфиг?

Hi

У меня есть небольшая задача, я хочу скачать конфигурационный файл. Для этого использую инструмент selenium.

У меня есть список пользователей и несколько вариантов конфигураций на каждого. Я пытаюсь сделать загрузку конфига для android с помощью скрипта для user2 (как пример), ниже код на python

table = driver.find_element(By.ID, "users")
rows = table.find_elements(By.CSS_SELECTOR, "td")
              
for i in range(len(rows)):
        if rows[i].text == "user2":
        tt = driver.find_element(By.PARTIAL_LINK_TEXT, 'Android').click()


Но в данном случае выгрузится конфиг для android для user1 (то есть самый первый).

Подскажите что нужно дополнить в скрипте, чтобы получить конф файл, именно того user который мне нужен?

Код браузера:
<table class="table table-striped table-hover table-condensed" id="users">
    <thead>
        <tr>
            <td class="listhdrr" width="25%">User</td>
            <td class="listhdrr" width="35%">Certificate Name</td>
            <td class="listhdrr" width="40%">Export</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td class="listlr">Certificate (SSL/TLS, no Auth)</td>
            <td class="listr">user1</td>
            <td class="listr">- Inline Configurations:<br>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;confinline&quot;, -1,0)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> Most Clients</a>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;confinlinedroid&quot;, -1,0)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> Android</a>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;confinlineios&quot;, -1,0)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> OpenVPN Connect (iOS/Android)</a><br>- Bundled Configurations:<br>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;confzip&quot;, -1,0)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> Archive</a>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;conf&quot;, -1,0)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> Config File Only</a><br>- Current Windows Installer (2.5.8-Ix04):<br>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;inst-x64-msi&quot;, -1,0)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> 64-bit</a>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;inst-x86-msi&quot;, -1,0)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> 32-bit</a>&nbsp;&nbsp; <br>- Legacy Windows Installers (2.4.12-Ix01):<br>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;inst-Win10&quot;, -1,0)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> 10/2016/2019</a>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;inst-Win7&quot;, -1,0)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> 7/8/8.1/2012r2</a><br>- Viscosity (Mac OS X and Windows):<br>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;visc&quot;, -1,0)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> Viscosity Bundle</a>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;confinlinevisc&quot;, -1,0)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> Viscosity Inline Config</a><br>- Yealink SIP Handsets:<br>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;conf_yealink_t28&quot;, -1,0)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> T28</a>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;conf_yealink_t38g&quot;, -1,0)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> T38G (1)</a>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;conf_yealink_t38g2&quot;, -1,0)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> T38G (2) / V83</a><br>- Snom SIP Handsets:<br>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;conf_snom&quot;, -1,0)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> SNOM</a></td>
        </tr>
 
 
        
        
        <tr>
            <td class="listlr">Certificate (SSL/TLS, no Auth)</td>
            <td class="listr">user2</td>
            <td class="listr">- Inline Configurations:<br>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;confinline&quot;, -1,5)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> Most Clients</a>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;confinlinedroid&quot;, -1,5)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> Android</a>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;confinlineios&quot;, -1,5)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> OpenVPN Connect (iOS/Android)</a><br>- Bundled Configurations:<br>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;confzip&quot;, -1,5)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> Archive</a>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;conf&quot;, -1,5)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> Config File Only</a><br>- Current Windows Installer (2.5.8-Ix04):<br>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;inst-x64-msi&quot;, -1,5)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> 64-bit</a>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;inst-x86-msi&quot;, -1,5)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> 32-bit</a>&nbsp;&nbsp; <br>- Legacy Windows Installers (2.4.12-Ix01):<br>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;inst-Win10&quot;, -1,5)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> 10/2016/2019</a>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;inst-Win7&quot;, -1,5)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> 7/8/8.1/2012r2</a><br>- Viscosity (Mac OS X and Windows):<br>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;visc&quot;, -1,5)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> Viscosity Bundle</a>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;confinlinevisc&quot;, -1,5)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> Viscosity Inline Config</a><br>- Yealink SIP Handsets:<br>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;conf_yealink_t28&quot;, -1,5)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> T28</a>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;conf_yealink_t38g&quot;, -1,5)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> T38G (1)</a>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;conf_yealink_t38g2&quot;, -1,5)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> T38G (2) / V83</a><br>- Snom SIP Handsets:<br>&nbsp;&nbsp; <a href="javascript:download_begin(&quot;conf_snom&quot;, -1,5)" class="btn btn-sm btn-primary"><i class="fa fa-download"></i> SNOM</a></td>
        </tr>
    </tbody>
</table>
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
Можно использовать XPath для написания локатора, это очень мощный инструмент.
locator= '//td[text()="user2"]//following-sibling::td//a[contains(text(),"Android")][1]'
driver.find_element(By.XPATH, locator).click()


Можно также воспользоваться ответом выше от duff89, только нужно учитывать, что на одной строке в таблице слово Andorid встречается дважды и вам нужен не i-й элемент, а 2 * i - 1, то есть первый, третий, пятый и т.д.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@duff89
Чтобы не сильно менять поиск, попробуйте сделать так:
table = driver.find_element(By.ID, "users")
rows = table.find_elements(By.CSS_SELECTOR, "td")
              
for i in range(len(rows)):
        if rows[i].text == "user2":
        driver.find_elements(By.PARTIAL_LINK_TEXT, 'Android')[i].click() # берем i-й элемент
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы