【发布时间】:2015-04-09 10:11:43
【问题描述】:
这里有一些额外的信息来回答 cmets 中的问题:
- 这是一个需要登录名和密码的私人网站。很遗憾,出于安全原因,我无法提供此信息。
- 您看到的是 300 行脚本的一部分。它执行以下操作:转到 URL,登录页面,浏览到特定页面,从下拉列表中读取文件列表,更改每个帐户的下拉选择并下载文件。继续这样做,直到下载所有文件。
- 该网站有大量文件。目前该脚本能够下载 30 多个文件。每次运行都会在同一个文件中失败。
- 如果您还有任何问题,请告诉我。
我有一个从网站下载多个文件的脚本。
我在 Chrome 中收到以下错误:
从服务器收到重复的标头
我在网上搜索过,似乎指定的文件名需要用引号引起来。不幸的是,我在下载文件时没有指定文件名,所以我不知道如何解决这个问题。
以下是我正在使用的部分代码:
#!/bin/ruby
require 'rubygems'
require 'watir-webdriver'
require 'selenium-webdriver'
require 'headless'
headless = Headless.new(autopick: true, reuse: false, destroy_at_exit: true).start
prefs = {
:download => {
:prompt_for_download => false,
:default_directory => path['xdrive']
},
:profile => {
:content_settings => {
:pattern_pairs => {
:* => {
:'multiple-automatic-downloads' => 1
}
}
}
}
}
client = Selenium::WebDriver::Remote::Http::Default.new
client.timeout = 60 # seconds - default is 60
d = Selenium::WebDriver.for :chrome, :prefs => prefs, :http_client => client, :switches => %w[--disable-popup-blocking --disable-translate]
b = Watir::Browser.new d
@myLinks.each { |option|
puts "Getting " + option[:text]
b.select_list(:id, "someField").select_value(option[:value])
sleep 6
b.goto "https://www.somewebsite.com/DownloadFile.ashx"
sleep 1
}
【问题讨论】:
-
感谢您编辑我的问题。
-
你能用http客户端代替webdriver吗?例如需要 "httparty" File.open("/tmp/filename.ext", "wb") 做 |f| f.write HTTParty.get("somewebsite.com/DownloadFile.ashx").parsed_responseend
-
出错时正在执行哪一行代码? @myLinks 包含什么?可能缺少某些代码,或者浏览器打开时存在默认站点,但是我看到浏览器被告知在发生任何导航之前从选择列表中选择一个选项,因此很难理解浏览器在哪个页面上在脚本中的那一点。我了解您可能正在尝试保护 IP 或您正在做的确切工作,但不幸的是,这也使我们很难为您提供帮助,因为我们无法真正判断您的代码在做什么。
-
您可以使用
curl -I http://example.com查看标题并查找重复项,或者您可以在开发者工具打开时在谷歌浏览器中加载页面以查看标题。如果您可以提供一个重现问题的最小脚本,那将非常有帮助。另外,我不明白您在 Google Chrome 中查看的是哪个页面;你能解释一下你是如何重现这个错误的吗?更好的是,提供一些其他人可以遵循的说明来重现问题。 -
您提到问题出现在特定文件上。该文件与其他文件有什么区别?
标签: ruby google-chrome selenium-webdriver watir-webdriver