我想抓一些动态加载其组件的网页。 这个页面有一个onload脚本,在我的浏览器中输入URL后,我可以看到整个页面3-5秒。
问题是,当我呼叫br.open('URL')
时,响应是0秒的网页。
HTML(我想要的)和br.open('URL')
的结果之间的时间间隔为3-5秒。
答案 0 :(得分:11)
您遇到的问题是网页是通过javascript引擎在您的网络浏览器中呈现的。但是,机械化无法自行执行javascript,所以无论你等多久,你都不会只使用机械化来获取你所缺少的HTML。
有关如何动态生成内容的详细信息,请查看此question。
答案 1 :(得分:1)
使用机械化工作来创建具有丰富javascripts内容的网页并不容易,但是有很多方法可以根据不同情况获得您想要的内容。
如果有一些json请求用于创建内容,那么您可以调用该URL并尝试解析响应以获取内容,然后尝试正确加入。
如果您需要使用某些表单,可以创建一些表单字段并在mechanize中设置它们的值。或者,只需编写一个方法,对POST
或GET
数据进行编码(引用特殊字符等),然后使用mechanize.browser.open
方法发送它们。
如果页面有一些基于javascript的安全功能(比如在发布之前形成数据的某些特殊编码),那么您可以使用node.js之类的javascript应用程序服务器来处理一些javascript代码块。
但事实上,上述某些选项并不容易,在使用机械化进行此类项目之前,您必须三思而后行。