如何从JavaScript“ onclick window.open”事件中抓取URL?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何从JavaScript“ onclick window.open”事件中抓取URL?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1587字,纯文字阅读大概需要3分钟。
内容图文
![如何从JavaScript“ onclick window.open”事件中抓取URL?](/upload/InfoBanner/zyjiaocheng/676/be4a6e2dfbcb41aaa5ca210e250fbf2b.jpg)
我正在尝试从使用JavaScript的页面抓取URL.他们没有在页面上链接,而是为许多表行创建了onClick事件,因此,当您单击该行时,它将带您到链接.
我尝试使用Mechanize抓取网址:
agent = Mechanize.new
page = agent.get(url)
page.links_with(:href => /^http?/).each do |link|
puts link.href
end
但是,通过HREF引用查找链接在这里行不通,因为它们在页面上是onClick事件的一部分:
<tr onclick="window.open('/someurl');">
是否有使用Mechanize或其他一些gem解析页面上代码并提取onClick事件中嵌入的URL的好方法?
如果没有好的即用型解决方案,那么最好的正则表达式呢?我是regex的新手,所以还不能完全靠自己整理一些东西.
解决方法:
您应该使用解析器.正则表达式和HTML / XML不能很好地融合在一起,因为正则表达式的设计目的不是处理HTML和XML文档中包含的不规则性.非常简单的任务可能适用于某种模式,但是当HTML更改时,您会很快发现它们很脆弱并且很容易损坏.
Mechanize for Ruby在内部使用Nokogiri,这是获取这些参数的绝佳方法.您可以访问Mechanize的内部Nokogiri文档,并从中找到< tr>.标签:
require 'mechanize'
page = Mechanize.new
page = agent.get('http://somesite.foo.com')
page.search('tr[onclick]').map{ |n| n['onclick'][/\(['"]([^)]+)['"]\)/, 1] }
如果我直接使用Nokogiri来解析此片段:
<tr onclick="window.open('/someurl');">
我可以做这个:
require 'nokogiri'
page = Nokogiri::HTML(%[<tr onclick="window.open('/someurl');">])
page.search('tr[onclick]').map{ |n| n['onclick'][/\(['"]([^)]+)['"]\)/, 1] }
=> ["/someurl"]
请注意,我正在使用CSS访问器’tr [onclick]’进行搜索,这使得查找特定节点非常容易.如果您知道JavaScript,CSS或jQuery,您会发现使用其内置的CSS支持可以轻松选择Nokogiri.
也,
n['onclick'][/\(['"]([^)]+)['"]\)/, 1]
可以这样写:
n['onclick'][/\(([^)]+)\)/, 1][1..-2]
内容总结
以上是互联网集市为您收集整理的如何从JavaScript“ onclick window.open”事件中抓取URL?全部内容,希望文章能够帮你解决如何从JavaScript“ onclick window.open”事件中抓取URL?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。