首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >计算中的异常

计算中的异常
EN

Stack Overflow用户
提问于 2012-05-15 11:47:40
回答 1查看 183关注 0票数 2

我正在尝试与一个编码相当糟糕、速度极慢的网站进行交互。我将用一个例子来说明我遇到的问题:

在这个网页上有两个选择框,第一个用于选择一个国家,在更改时向one服务器发出AJAX请求,然后one服务器返回一个城市列表。此列表用于填充第二个选择框。现在的问题是,我可以使用phanomtjs的页面对象中的evaluate函数来迭代第一个选择框并选择正确的选项。但在此之后,我必须等待n秒,才能填充第二个框。目前,我已经通过设置一个计时器来“解决”这个问题,在从第二个框中选择城市之前等待25秒。然而,这是一个非常糟糕的解决方案。首先,25秒在所有情况下都不够长,所以有时它会超时并失败。第二个问题是,在大多数情况下,25秒太长了。

所以我必须找到一种方法来等待第二个盒子被填充。首先,我认为我可以在evaluate函数中使用setInterval来测试是否填充了选择框。这是可行的,但有一个问题,因为setInterval是异步的,所以使用这种方法我无法确定是否可以做出正确的选择。为了说明我的意思,下面的代码是在我不需要等待的情况下是如何工作的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var retval = page.evaluate(function () {
    return selectOption('select_id',
                        info['country']);
});

该selectOption是一个遍历select元素的函数,直到找到正确的option元素,如果失败,则返回false,然后该返回值由求值函数返回,以便我可以检查它是否有效。

另一种选择是只在网页上下文中使用setInterval进行等待,然后在失败时引发和异常。我试过这样做,但我似乎无法捕捉到网站范围之外的异常。PhantomJS将异常转储到终端中,但我无法拦截它。

有什么办法可以解决这个问题吗?或者我应该只使用固定等待时间选项?

编辑:我试着使用page.onError,但它似乎没有被使用。

EN

回答 1

Stack Overflow用户

发布于 2014-02-06 08:25:10

我还需要找出evaluated函数中是否抛出了异常。我设法做到了这一点,添加了另一个层,用try-catch对函数进行了包装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Wrap a function (func) inside a try-catch block and return
// the exception if any. Otherwise return null. The ctx is a
// a bucket for all the variables to be passed to func.
var tryCatchWrapper = function(func, ctx) {        
    try {
        funct(ctx);
    }
    catch(e) {
        return e;
    }

    return null;
}

然后,为了评估somefunction,我像这样使用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var error = page.evaluate(tryCatchWrapper, somefunction);
if (error) {
    handle error...
}

如果我希望将参数传递给func,那么我会使用context对象。有关如何将变量参数传递给函数的不同方法,请查看问题:"JavaScript variable number of arguments to function"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10600049

复制
相关文章
JSON数据获取指南!
在互联网时代,数据是金钱的来源。然而,要从海量的网页中提取需要的数据并不容易。本文将带你了解如何使用Node.js编写简易爬虫程序,帮助你轻松获取并处理JSON数据,让你不再为数据发愁。
用户614136809
2023/09/25
3840
jsonp获取json数据
这两天做微信端JS接口,当时遇到的第一个问题就是权限验证的参数请求,当你请求access_token等的时候,就会存在跨域问题:然后在网上查了,采用ajax的jsonp进行跨域请求,后来报错了,返回的结果错误。然后认真看了一下文档,发现ajax的jsonp返回的数据是callback(json),卡到这里。最后同时为了安全的考虑,我就将这一部分的权限验证参数在后端做,然后前端请求,这样就避免了跨域,同时将安全考虑进去了。
Rattenking
2021/01/29
2.4K0
burpsuite 无法获取本地数据
当Firefox和burpsuite设置代理地址127.0.0.1,端口:80内容可以显示在firefox网页而无法在burpsuite显示,求教是什么原因?
用户7446386
2020/06/09
2.2K0
Jquery 使用getJSON 获取json数据
1.先引用jq获取下载到本地 CDN地址:https://code.jquery.com/jquery-latest.js
Alone88
2019/10/22
3.5K0
zabbix的server无法获取数据
背景 部署完Zabbix agent之后,Server无法获取到数据 报错 服务端 [root@hf-01 ~]# zabbix_get -s 192.168.202.131 -p 10050 -k 'my.estab.count' zabbix_get [3088]: Get value error: cannot connect to [[192.168.202.131]:10050]: [113] No route to host [root@hf-01 ~]# 分析 服务端ping
运维小白
2022/01/06
1.7K0
Selenium+BeautifulSoup+json获取 Script 标签内的 json 数据
Selenium爬虫遇到 数据是以 JSON 字符串的形式包裹在 Script 标签中, 假设Script标签下代码如下:
诡途
2022/05/09
3.3K0
BeautifulSoup 获取 Script 标签内的 json 数据
有时候,我们可能会遇到数据是以 JSON 字符串的形式包裹在 Script 标签中,此时使用 BeautifulSoup 仍然可以很方便的提取。
happyJared
2019/11/03
4.7K0
JavaScript 递归遍历json串获取相关数据
url: "/home/level4Menu1",
授客
2019/11/18
3.4K0
JavaScript 递归遍历json串获取相关数据
python-获取URL中的json数据
数据源为某系统提供的URL,打开是json文件,python代码获取如下: URL替换成自己的即可。 import urllib.request def get_record(url): resp = urllib.request.urlopen(url) ele_json = json.loads(resp.read()) return ele_json if __name__ == '__main__': print(get_record('http://abc.co/
py3study
2020/01/16
5.5K0
Js解析Json数据获取元素JsonPath与深度
JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java,JsonPath 对于 JSON 来说,相当于 XPATH 对于 XML。
大道七哥
2020/03/28
13.6K0
Js解析Json数据获取元素JsonPath与深度
php的json_decode函数无法解析json
作者:matrix 被围观: 5,526 次 发布时间:2014-09-04 分类:零零星星 | 9 条评论 »
HHTjim 部落格
2022/09/26
2K0
[接口测试 - 基础篇] 04 无法绕过的json解析
概述 我们先看一下什么是json。 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。 JSON 语法规则 在javascript语言中,一切都是对象。因此,任何
苦叶子
2018/04/09
3.1K0
解决mybatis 无法映射 数据库 json字段的问题
1.前言 MySQL从5.7版本之后开始支持JSON数据类型,相比于JSON格式的字符串类型有如下优势:存储在JSON列中的JSON文档的会被自动验证。无效的文档会产生错误;最佳存储格式。存储在JSON列中的JSON文档会被转换为允许快速读取文档元素的内部格式。 2.背景 mybatis目前还不支持映射json的数据格式,需要我们自己进行增强 3.实现 对mybatis TypeHandler进行增强 3.1ListStringTypeHandler 核心代码 package com.xxx.xxx.pip
特特
2022/05/22
4.5K2
php – 通过curl从url获取JSON数据「建议收藏」
我试图通过curl连接从URL获取JSON数据.当我打开链接时:它显示{“version”:“N / A”,“success”:true,“status”:true}. 现在,我希望获得以上内容.
全栈程序员站长
2022/07/11
4K0
python flask里 post请求,JSON数据获取方式总结
#!flask/bin/python #encodig=utf-8 # _*_ coding:utf-8 _*_ # Writer : byz # dateTime : 2016-08-05 from flask import Flask, jsonify, request, abort import json app = Flask(__name__) @app.route('/ana', methods=['GET', 'POST']) def call_analysis(): print
用户1214487
2018/04/16
8.6K0
map怎么转json对象_json怎么获取map
JSON 对象保存在大括号内。就像在JavaScript中, 对象可以保存多个 键/值 对。Map对象保存键/值对,是键/值对的集合。任何值(对象或者原始值) 都可以作为一个键或一个值。Object结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应。
全栈程序员站长
2022/09/23
3.5K0
java后台设计简单的json数据接口,设置可跨域访问,前端ajax获取json数据
在开发的过程中,有时候我们需要设计一个数据接口。有时候呢,数据接口和Web服务器又不在一起,所以就有跨域访问的问题。 第一步:简单的设计一个数据接口。 数据接口,听起来高大上,其实呢就是一个简单的Serlvlet,在有get的请求的时候,返回我们要提供的数据就可以。现在JSON数据格式已经很普遍,因为很方便,所以我们做一个json数据的接口。直接看代码 先建立一个实体类,就是包装我们的数据的 bean/kapian.java package bean; public class kapian { /
ShenduCC
2018/04/27
3.7K0
java后台设计简单的json数据接口,设置可跨域访问,前端ajax获取json数据
vmware workstation无法获取IP
有时在安装好虚拟机后,dhclient会发现无法获取IP地址 原因,有可能是连接网络模式的冲突——>个人推测 解决办法: 这时候只需删除桥接模式和仅主机模式,只留下NAT模式 这时候在
运维小白
2018/02/06
2.5K0
vmware workstation无法获取IP
虚拟机无法联网 无法自动获取IP
突然有一天开发无法连接上虚拟机了,打开虚拟机先是发现无法联网,后来ifconfig连IP都没有了,只有一个127.0.0.1
叶茂林
2023/09/02
3310
点击加载更多

相似问题

JSON无法获取数据

22

无法获取json数据

22

无法从json获取数据

10

无法获取json对象数据

20

我无法获取JSON数据

16
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文