无法点击带有JS后端的下载链接

网站上有一个链接可下载csv文件。该链接位于表中,但实际的下载链接已隐藏。

<div id="testjs">
    <div test-example="">
        <table test-example="">
            <tr test-example="">
                <th test-example="">Car</th>
                <th test-example="">File</th>
            </tr>
            <tr test-example="">
                <td test-example="">Ford</td>
                <td test-example="">
                    <a test-example="" href="#">ford.csv</a>
                </td>
            </tr>
        </table>
    </div>
</div>

我正在尝试通过使用python / selenium抓取网站来自动执行文件下载。

from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get("https://www.example.com")
driver.find_element_by_link_text('ford.csv')

上面的最后一行运行时,脚本返回:

<selenium.webdriver.remote.webelement.WebElement (session="<example session string>",element="<example element string>")>

当我运行下面的代码时,没有任何反应:

driver.find_element_by_link_text('ford.csv').click()

我如何下载文件?

sirfhg 回答:无法点击带有JS后端的下载链接

以下代码行显然没有任何问题:

driver.find_element_by_link_text('ford.csv')

但是,在这一点上,值得一提的是 dot 字符 . 总是具有特殊的作用/含义。


假设您打算在文本为 ford.csv 的元素上click(),该元素与文本为 Ford 的元素相邻,作为解决方案,可以:

  • 将文本ford.csv分成两部分fordcsv,并在中使用
  • 当您打算调用click()时,您必须为element_to_be_clickable()引发 WebDriverWait
  • 您可以使用以下任一Locator Strategies

    • 使用CSS_SELECTOR

      WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"tr[test-example] td:nth-child(2)>a[test-example]"))).click()
      
    • 使用XPATH

      WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//a[contains(.,'ford') and contains(.,'csv')]"))).click()
      
    • 注意:您必须添加以下导入:

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

新的Selenium版本不支持PhantomJS,请考虑使用其他驱动程序。针对您的问题,单击JS按钮时出现错误。

尝试一下,我在硒库中找到click_js按钮

item = driver.find_element_by_link_text('ford.csv')
ActionChains(driver).move_to_element(item).click().perform()
本文链接:https://www.f2er.com/3127813.html

大家都在问