【问题标题】:How to get download link to the file, in the firefox downloads via selenium and python3如何通过 selenium 和 python3 在 firefox 下载中获取文件的下载链接
【发布时间】:2019-08-29 07:21:05
【问题描述】:

我无法在网页中获取链接,它是使用 JS 自动生成的。但是点击href后我可以得到firefox下载窗口(它是一个JS脚本,返回href)。

如何使用 selenium 在此窗口中获取链接。如果我不能这样做,是否有任何其他方式来获取链接(HTML DOM 中没有显式链接)

【问题讨论】:

  • 网址是否是静态的,如果不是,您需要确定您从哪个来源获取网址,如果您需要使用javascript执行器,请先进行研发或询问您的开发人员,您需要如果您需要从这里提供帮助,请分享 URL,而无需观察任何人都无法预测

标签: python-3.x selenium firefox


【解决方案1】:
from selenium import webdriver

profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.folderList', 2) # 2 means custom location
profile.set_preference('browser.download.manager.showWhenStarting', False)
profile.set_preference('browser.download.dir', '/tmp') # location is tmp
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv')

browser = webdriver.Firefox(profile)
browser.get("yourwebsite")

element = browser.find_element_by_id('yourLocator')
href = element.get_attribute("href")

现在你的href中有网站

使用下方导航到 URL

 browser.navigate().to(href)

【讨论】:

  • 这是我在 HTML 中的 href 属性的样子 some_name.zip
  • 此 some_name.zip 是否附加在您现有的网站中?观察它还是完全是另一个 URL?
  • 是的,最终链接看起来像随机字符串,我无法假设随机情况下会生成什么链接。
  • 检查该详细信息是否通过任何 API 在您的网页中提供,如果是这种情况,您需要获取 api 响应
【解决方案2】:

您可以采用以下方法:

  1. 使用WebElement.get_attribute()函数获取WebElement的href attribute

    href = your_element.get_attribute("href")
    
  2. 使用WebDriver.execute_script()函数评估JavaScript并返回真实的URL

    url = driver.execute_script("return " + href + ";")
    
  3. 现在您应该可以使用urllibrequests 库来下载文件了。如果您的网站采用身份验证 - 不要忘记从浏览器实例获取 Cookies 并将相关的 Cookie 标头添加到下载文件的请求中

【讨论】:

  • 就我而言,DOM 上没有任何正常的 href 链接。这就是我的链接在 html 代码中的样子 some_name.zip
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-30
  • 2019-10-10
  • 1970-01-01
  • 2018-11-24
  • 2020-08-10
  • 1970-01-01
  • 2019-02-05
相关资源
最近更新 更多