我有这个代码
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
?
我正在使用python的机械化模块导航网站,并且无法点击下一页的javascript链接.我做了一些阅读,人们建议我需要python-spidermonkey和DOMforms.我设法安装它们我不确定实际点击链接的语法.
我可以将页面上的代码识别为:
<a href="javascript:__doPostBack('ctl00$MainContent$gvSearchResults','Page$2')">2</a>
Run Code Online (Sandbox Code Playgroud)
有谁知道如何点击它?或者,如果可能还有其他工具.
谢谢
我正在尝试使用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
会让我登录.但是从通话中返回的页面是'哎呀,你还没有登录!' 页.
我已经验证了click
从post
调用返回的页面上的链接是否正常工作,但实际上我无法在没有JavaScript的情况下到达我需要的位置.当然,我已经在浏览器上使用相同的登录成功完成了此操作.
我究竟做错了什么?
我很难找到适合Mechanize文档的全面资源.即使是关于mechanize网站的主要文档也不是那么好:它似乎只列出了例子.
是否有更正式的文档位置,我可以看到此模块的类和方法列表?我对python有点新意,所以也许有一个简单的答案.
更具体地说,我需要一个很好的信息来源mechanize.Browser()
,我只能通过Stack Overflow上的随机问题找到相关信息.
网络上有一个FLV文件,可以直接在Chrome中下载.该文件是由中央电视台(CCTV)出版的电视节目.中央电视台是一家非盈利的国有广播公司,由中国纳税人提供资金,允许我们在不侵犯版权的情况下下载其内容.
使用wget
,我可以从不同的地址下载文件,但不能从Chrome中的地址下载.
这就是我试图做的事情:
url='http://114.80.235.200/f4v/94/163005294.h264_1.f4v?10000&key=7b9b1155dc632cbab92027511adcb300401443020d&playtype=1&tk=163659644989925531390490125&brt=2&bc=0&nt=0&du=1496650&ispid=23&rc=200&inf=1&si=11000&npc=1606&pp=0&ul=2&mt=-1&sid=10000&au=0&pc=0&cip=222.73.44.31&hf=0&id=tudou&itemid=135558267&fi=163005294&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&playtype=1&tk=163659644989925531390490125&brt=2&bc=0&nt=0&du=1496650&ispid=23&rc=200&inf=1&si=11000&npc=1606&pp=0&ul=2&mt=-1&sid=10000&au=0&pc=0&cip=222.73.44.31&hf=0&id=tudou&itemid=135558267&fi=163005294&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) 我有一个与机械化一起使用的CookieJar,我想添加一个cookie.我该怎么做呢?make_cookie()和set_cookie()对我来说不够清楚.
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
Run Code Online (Sandbox Code Playgroud) 我有一个特别困难的形式,我试图点击搜索按钮,似乎无法做到这一点.以下是页面源代码的表单代码:
<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吗?如果有,有什么建议吗?
我正在尝试执行以下操作:
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中加载网页?
我正在使用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实现此行为?