标签: mechanize

机械化如何获取当前网址

我有这个代码

require 'mechanize'
@agent = Mechanize.new
page = @agent.get('http://something.com/?page=1')
next_page = page.link_with(:href=>/^?page=2/).click
Run Code Online (Sandbox Code Playgroud)

如您所见,此代码应转到下一页.

next_page应该有网址http://something.com/?page=2

如何获取当前网址next_page

ruby mechanize

16
推荐指数
1
解决办法
1万
查看次数

15
推荐指数
1
解决办法
9244
查看次数

点击python中的javascript链接?

我正在使用python的机械化模块导航网站,并且无法点击下一页的javascript链接.我做了一些阅读,人们建议我需要python-spidermonkey和DOMforms.我设法安装它们我不确定实际点击链接的语法.

我可以将页面上的代码识别为:

<a href="javascript:__doPostBack('ctl00$MainContent$gvSearchResults','Page$2')">2</a>
Run Code Online (Sandbox Code Playgroud)

有谁知道如何点击它?或者,如果可能还有其他工具.

谢谢

javascript python screen-scraping mechanize spidermonkey

15
推荐指数
1
解决办法
1万
查看次数

在Mechanize请求之间维护cookie

我正在尝试使用Ruby版本的Mechanize从我们正在离开的票证管理系统中提取我的雇主的票据,而不提供API.

问题是,似乎Mechanize没有在post通话和get下面显示的呼叫之间保留cookie :

require 'rubygems'
require 'nokogiri'
require 'mechanize'

@agent = Mechanize.new

page = @agent.post('http://<url>.com/user_session', {
                                            'authenticity_token' => '<token>',
                                            'user_session[login]' => '<login>',
                                            'user_session[password]' => '<password>',
                                            'user_session[remember_me]' => '0',
                                            'commit' => 'Login'
})

page = @agent.get 'http://<url>.com/<organization>/<repo-name>/tickets/1'
puts page.title
Run Code Online (Sandbox Code Playgroud)

user_session是网站登录页面POST的URL,我已经确认这确实get会让我登录.但是从通话中返回的页面是'哎呀,你还没有登录!' 页.

我已经验证了clickpost调用返回的页面上的链接是否正常工作,但实际上我无法在没有JavaScript的情况下到达我需要的位置.当然,我已经在浏览器上使用相同的登录成功完成了此操作.

我究竟做错了什么?

ruby screen-scraping mechanize

15
推荐指数
1
解决办法
1万
查看次数

需要更多机械化文档(python)

我很难找到适合Mechanize文档的全面资源.即使是关于mechanize网站的主要文档也不是那么好:它似乎只列出了例子.

是否有更正式的文档位置,我可以看到此模块的类和方法列表?我对python有点新意,所以也许有一个简单的答案.

更具体地说,我需要一个很好的信息来源mechanize.Browser(),我只能通过Stack Overflow上的随机问题找到相关信息.

python mechanize

15
推荐指数
2
解决办法
7133
查看次数

模拟浏览器下载文件?

网络上有一个FLV文件,可以直接在Chrome中下载.该文件是由中央电视台(CCTV)出版的电视节目.中央电视台是一家非盈利的国有广播公司,由中国纳税人提供资金,允许我们在不侵犯版权的情况下下载其内容.

使用wget,我可以从不同的地址下载文件,但不能从Chrome中的地址下载.

这就是我试图做的事情:

url='http://114.80.235.200/f4v/94/163005294.h264_1.f4v?10000&key=7b9b1155dc632cbab92027511adcb300401443020d&amp;playtype=1&amp;tk=163659644989925531390490125&amp;brt=2&amp;bc=0&amp;nt=0&amp;du=1496650&amp;ispid=23&amp;rc=200&amp;inf=1&amp;si=11000&amp;npc=1606&amp;pp=0&amp;ul=2&amp;mt=-1&amp;sid=10000&amp;au=0&amp;pc=0&amp;cip=222.73.44.31&amp;hf=0&amp;id=tudou&amp;itemid=135558267&amp;fi=163005294&amp;sz=59138302'  

wget -c  $url --user-agent="" -O  xfgs.f4v
Run Code Online (Sandbox Code Playgroud)

这也不起作用:

wget -c  $url   -O  xfgs.f4v
Run Code Online (Sandbox Code Playgroud)

输出是:

Connecting to 118.26.57.12:80... connected.  
HTTP request sent, awaiting response... 403 Forbidden  
2013-02-13 09:50:42 ERROR 403: Forbidden.  
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我最终想用Python库下载它mechanize.这是我正在使用的代码:

import mechanize  
br = mechanize.Browser()  
br = mechanize.Browser()  
br.set_handle_robots(False)  
br.set_handle_equiv(False)   
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]  
url='http://114.80.235.200/f4v/94/163005294.h264_1.f4v?10000&key=7b9b1155dc632cbab92027511adcb300401443020d&amp;playtype=1&amp;tk=163659644989925531390490125&amp;brt=2&amp;bc=0&amp;nt=0&amp;du=1496650&amp;ispid=23&amp;rc=200&amp;inf=1&amp;si=11000&amp;npc=1606&amp;pp=0&amp;ul=2&amp;mt=-1&amp;sid=10000&amp;au=0&amp;pc=0&amp;cip=222.73.44.31&amp;hf=0&amp;id=tudou&amp;itemid=135558267&amp;fi=163005294&amp;sz=59138302' 
r = br.open(url).read()  
tofile=open("/tmp/xfgs.f4v","w")  
tofile.write(r)  
tofile.close()
Run Code Online (Sandbox Code Playgroud)

这是结果:

Traceback (most recent call last):  
  File "<stdin>", line 1, in …
Run Code Online (Sandbox Code Playgroud)

python shell wget mechanize

15
推荐指数
4
解决办法
1万
查看次数

如何在Python中将cookie添加到现有的cookielib CookieJar实例?

我有一个与机械化一起使用的CookieJar,我想添加一个cookie.我该怎么做呢?make_cookie()和set_cookie()对我来说不够清楚.

br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
Run Code Online (Sandbox Code Playgroud)

python cookies mechanize cookielib cookiejar

14
推荐指数
1
解决办法
2万
查看次数

单击Ruby Mechanize的按钮

我有一个特别困难的形式,我试图点击搜索按钮,似乎无法做到这一点.以下是页面源代码的表单代码:

<input type="image" name="" src="http://images.example.com/WOKRS53B4/images/search.gif" align="absmiddle" border="0" onclick="return check_form_inputs('UA_GeneralSearch_input_form','search');" title="Search" alt="Search" class="">
Run Code Online (Sandbox Code Playgroud)

我正在尝试执行标准的机械化点击操作:

login_page = agent.click(homepage.link_with(:text => "Search"))
Run Code Online (Sandbox Code Playgroud)

这是因为按钮使用javascript吗?如果有,有什么建议吗?

ruby mechanize

14
推荐指数
2
解决办法
2万
查看次数

Ruby Mechanize https错误

我正在尝试执行以下操作:

page = Mechanize.new.get "https://sis-app.sph.harvard.edu:9030/prod/bwckschd.p_disp_dyn_sched"
Run Code Online (Sandbox Code Playgroud)

但我只得到这个例外:

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: sslv3 alert illegal parameter
    from /Users/amosng/.rvm/gems/ruby-1.9.3-p194/gems/net-http-persistent-2.7/lib/net/http/persistent/ssl_reuse.rb:70:in `connect'
    from /Users/amosng/.rvm/gems/ruby-1.9.3-p194/gems/net-http-persistent-2.7/lib/net/http/persistent/ssl_reuse.rb:70:in `block in connect'
    from /Users/amosng/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/timeout.rb:54:in `timeout'
    from /Users/amosng/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/timeout.rb:99:in `timeout'
    from /Users/amosng/.rvm/gems/ruby-1.9.3-p194/gems/net-http-persistent-2.7/lib/net/http/persistent/ssl_reuse.rb:70:in `connect'
    from /Users/amosng/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:755:in `do_start'
    from /Users/amosng/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:750:in `start'
    from /Users/amosng/.rvm/gems/ruby-1.9.3-p194/gems/net-http-persistent-2.7/lib/net/http/persistent.rb:511:in `connection_for'
    from /Users/amosng/.rvm/gems/ruby-1.9.3-p194/gems/net-http-persistent-2.7/lib/net/http/persistent.rb:806:in `request'
    from /Users/amosng/.rvm/gems/ruby-1.9.3-p194/gems/mechanize-2.5.1/lib/mechanize/http/agent.rb:258:in `fetch'
    from /Users/amosng/.rvm/gems/ruby-1.9.3-p194/gems/mechanize-2.5.1/lib/mechanize.rb:407:in `get'
    from (irb):549
    from /Users/amosng/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'
Run Code Online (Sandbox Code Playgroud)

如何在Mechanize中加载网页?

ruby ssl https mechanize

14
推荐指数
1
解决办法
7657
查看次数

使用ruby mechanize检测重定向

我正在使用mechanize/nokogiri宝石来解析一些随机页面.我遇到301/302重定向问题.以下是代码片段:

agent = Mechanize.new
page = agent.get('http://example.com/page1')
Run Code Online (Sandbox Code Playgroud)

mydomain.com上的测试服务器将使用301/302状态代码将page1重定向到page2,因此我希望有

page.code == "301"
Run Code Online (Sandbox Code Playgroud)

相反,我总是得到page.code == "200".

我的要求是:

  • 我想要遵循重定向(默认机械化行为,这很好)
  • 我希望能够检测到该页面实际上已被重定向

我知道我可以看到page1 agent.history,但那不可靠.我也想要重定向状态代码.

如何使用mechanize实现此行为?

ruby redirect http mechanize

14
推荐指数
1
解决办法
8269
查看次数