Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用不带url的python脚本从网页下载文件,调用onClick函数_Javascript_Python_Html - Fatal编程技术网

Javascript 使用不带url的python脚本从网页下载文件,调用onClick函数

Javascript 使用不带url的python脚本从网页下载文件,调用onClick函数,javascript,python,html,Javascript,Python,Html,有一个网页有一个链接“点击下载”,点击下载文件。 我可以手动下载此文件,方法是转到网页并单击此链接,但我需要通过python脚本下载此文件 如果我看到源代码,我可以看到锚定标记是,它将运行js函数 以csv下载这里可以应用两个基本选项: 模拟onclick()调用中涉及的逻辑-在您的情况下,使用,或 高级方法-使用-找到链接并单击它,自动化真正的浏览器,无头(PhantomJS)或无头(PhantomJS): from selenium import webdriver driver =

有一个网页有一个链接“点击下载”,点击下载文件。 我可以手动下载此文件,方法是转到网页并单击此链接,但我需要通过python脚本下载此文件

如果我看到源代码,我可以看到锚定标记是,它将运行js函数


以csv下载
这里可以应用两个基本选项:

  • 模拟
    onclick()
    调用中涉及的逻辑-在您的情况下,使用,或
  • 高级方法-使用-找到链接并单击它,自动化真正的浏览器,无头(
    PhantomJS
    )或无头(
    PhantomJS
    ):

    from selenium import webdriver
    
    driver = webdriver.PhantomJS()
    driver.get('url here')
    
    driver.find_element_by_class_name('download-data-link1').click()
    
不过,据我所知,点击链接会触发一个“下载”浏览器对话框出现-然后
PhantomJS
就不是一个选项,因为它不支持下载。如果使用
Chrome
Firefox
,则需要调整浏览器功能,以便在不打开弹出窗口的情况下自动下载文件,请参阅:


    • 谢谢大家的回答,但我想补充一下,我是如何实现它的

    • 首先,您可以创建一个firefox配置文件。为此:
    • 关闭所有firefox浏览器
    • 转到cmd提示符并执行firefox.exe-P
    • 创建配置文件并记下创建新配置文件的文件夹的名称
    • 您可以在这里为您的个人资料设置一些选项,例如-自动从内容下载此类文件等

      现在下载selenium for python并使用以下代码

      import os
      from selenium import webdriver
      
      download_dir="D:\a"
      
      fp = webdriver.FirefoxProfile(<profile directory here as in step 4>)
      fp.set_preference("browser.download.dir", download_dir)
      fp.set_preference("browser.download.manager.showWhenStarting",False)
      fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream");
      
      browser = webdriver.Firefox(firefox_profile=fp)
      browser.get("http://pypi.python.org/pypi/selenium")
      # you can use your url here 
      browser.find_element_by_partial_link_text("selenium-2").click()
      # Use your method to identify class or link text here
      browser.close();
      
      导入操作系统
      从selenium导入webdriver
      下载\u dir=“D:\a”
      fp=webdriver.FirefoxProfile()
      fp.set_首选项(“browser.download.dir”,download_dir)
      fp.set_首选项(“browser.download.manager.showWhenStarting”,False)
      fp.set_首选项(“browser.helperApps.neverAsk.saveToDisk”,“应用程序/八位字节流”);
      浏览器=webdriver.Firefox(Firefox\u profile=fp)
      browser.get(“http://pypi.python.org/pypi/selenium")
      #你可以在这里使用你的url
      浏览器。通过部分链接文本(“Seleniu-2”)查找元素。单击()
      #使用您的方法在此处标识类或链接文本
      browser.close();
      

      希望这对其他人有所帮助:)

      它对python有帮助吗?因为链接有一种趋势(特别是现在),以后会被添加到DOM中,或者响应用户触发的特定事件,这使得无头浏览器成为更好的选择(IMHO)。我会研究PhantomJS或类似的工具,即使它不是python,也可能是我可以从python脚本调用的东西。只是按照你的建议看。需要进一步研究
      PhantomJS
      可以通过
      selenium
      实现自动化,因此它可以是python。@ParthBatra:也可以是一个选项(链接到2个脚本:获取驱动程序下载所需内容,
      codeption start
      启动/停止selenium),然后您可以非常轻松地将该设置与python脚本一起使用