2016-08-19 145 views
0

使用Ruby机械化我已成功提交输入值的形式和我能够根据搜索条件,以获得最终页面HREF链接。由此产生的页面有PDF文件作为我需要下载的ahref链接。 属性HREF具有值:下载PDF文件是使用红宝石机械化

HREF ='xxx.do FILENAME =路径/ abc.pdf & SEARCHTEXT = AAA & ID = 123_4

其中SEARCHTEXT是输入的文本作为输入最初?。当我手动点击链接pdf时,在 网址为http://someip:8080/xxx/temp/123_4的新窗口中打开,这是在href属性中看到的相同ID。但实际的文件名不同,格式为xxx.123_2_.doc。我下面的代码返回0字节的文件 -

scraper.pluggable_parser.pdf = Mechanize::FileSaver 
File.open('n1pdf.pdf', 'wb'){|f| f << scraper.get(alink).body} 

其中ALINK = http://someip:8080/xxx/temp/123_4 如果我使用

File.open("new.pdf", "w") do |f| 
    uri = URI(alink) 
    f << Net::HTTP.get(uri) 
    end 

我得到HTTP未找到错误。 我不知道如果我这样做是正确的。是ID处理动态生成的,因为所得到的页面上的所有的PDF文件具有该ID与_1/2/3作为文件名(或URL)的会话ID。

请注意,每当我手动点击并打开一个PDF文件,然后铁杆,在我的代码的文件下载,但没有当我的代码中动态提取ID值,并分配给ALINK。不确定这是否与Cookie相关。请帮助。谢谢。

回答

0

确保它是正确的绝对URL:

uri = scraper.page.uri.merge(a[:href]) 
puts uri # just check to be sure 
File.open('n1pdf.pdf', 'wb'){|f| f << scraper.get(uri).body} 
+0

谢谢。有用 – user6733460