Select 使用 Selenium Python 的特定 HREF link

Select specific HREF link using Selenium Python

我正在尝试使用 Python 通过 Selenium 自动下载。我尝试下载的网站有多个选项,每个选项都有一个 HTML HREF 和一个 Excel HREF。所以站点代码如下所示:

       </ul>
            <li><a class="pnid-642 pv-pid-0 pvid-9972 cid-31">&nbsp;</a>24. Option 24
        <ul>
                            <li><table width='50%'><tr><td width='20%'>&nbsp;</td><td width='50%'>Select type</td><td width='15%'><A title='Html' HREF='/apps/carteras/genera_xsl_v2.0.php?param=RWJybTl4VEV4MnlHc0VSQVd5T1VKV3Q3STg4Rk5oS1RYUDdaa1dFbDhoWkwzam53L3huQzBnPT0='><span class="fa fa-file-code-o fa-2x" aria-hidden="true"'></span></a></td><td width='15%'><A title='Excel' HREF='/apps/carteras/genera_xsl2xls.php?param=RWJybTl4VEV4MnlHc0VSQVd5T1VKV3Q3STg4Rk5oS1RYUDdaa1dFbDhoWkwzam53L3huQzBnPT0='><span class="fa fa-file-excel-o fa-2x" aria-hidden="true"></span></a></td></tr></table></li>
            
        </ul>
            <li><a class="pnid-642 pv-pid-0 pvid-9972 cid-31">&nbsp;</a>25. Option 25
        <ul>
                            <li><table width='50%'><tr><td width='20%'>&nbsp;</td><td width='50%'>Select type<td width='15%'><A title='Html' HREF='/apps/carteras/genera_xsl_v2.0.php?param=RWJybTl4VEV4MnlHc0VSQVd5T1VKVTBSRDZ5aVNsb2JYUDdaa1dFbDhoWkwzam53L3huQzBnPT0='><span class="fa fa-file-code-o fa-2x" aria-hidden="true"'></span></a></td><td width='15%'><A title='Excel' HREF='/apps/carteras/genera_xsl2xls.php?param=RWJybTl4VEV4MnlHc0VSQVd5T1VKVTBSRDZ5aVNsb2JYUDdaa1dFbDhoWkwzam53L3huQzBnPT0='><span class="fa fa-file-excel-o fa-2x" aria-hidden="true"></span></a></td></tr></table></li>
            
        </ul>

我正在尝试自动下载选项 25 Excel 文件,但如您所见,Excel HREF 对于网站上的每个选项都是相同的。有没有一种方法可以使用 Selenium 只下载那个 Excel 文件?

谢谢

您可以尝试使用

通过元素包含的文本来查找该元素

driver.find_elements_by_xpath("//*[contains(text(), '25. Option 25')]")

要识别第 25 个 Excel 文件,请使用以下 xpath 来识别。

driver.find_element(By.XPATH, "//li[contains(., '25. Option 25')]/ul/li//a[@title='Excel']").click()

如果你想让它动态化,你可以创建一个方法并将选项文本作为参数传递。

def DownloadFileOptions(optionName) :
    driver.find_element(By.XPATH, "//li[contains(., '{}')]/ul/li//a[@title='Excel']".format(optionName)).click()
      
 

 DownloadFileOptions('25. Option 25')
 DownloadFileOptions('24. Option 24')

我建议您使用 webdriverwait() 并等待元素可点击。

 WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,  "//li[contains(., '25. Option 25')]/ul/li//a[@title='Excel']"))).click()

您需要导入以下库。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By