首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

HtmlUnit在循环中获取表,但不是第二次通过

HtmlUnit是一个基于Java的开源工具,用于模拟浏览器行为,实现对Web页面的自动化操作和数据提取。它可以用于前端开发、后端开发、软件测试等多个领域。

在循环中获取表时,可以通过以下步骤来实现:

  1. 创建一个HtmlPage对象,用于表示要操作的Web页面。
  2. 使用HtmlUnit提供的方法,如getPage()或getHtmlPage(),获取要操作的Web页面。
  3. 使用getPage().getHtmlElementById()方法,根据表的id属性获取表元素。
  4. 对获取到的表元素进行操作,如获取表的行、列、单元格等信息。

需要注意的是,在循环中获取表时,可能会遇到一些问题。其中一个常见的问题是在第二次循环中无法通过HtmlUnit获取到表的情况。这可能是由于页面加载时间、异步请求等原因导致的。

为了解决这个问题,可以尝试以下方法:

  1. 在获取表之前,使用等待机制,等待页面加载完成。可以使用HtmlUnit提供的等待方法,如waitForBackgroundJavaScript()或waitForBackgroundJavaScriptStartingBefore(),等待页面的异步请求完成。
  2. 在获取表之前,可以先判断页面是否已经加载完成。可以使用HtmlUnit提供的方法,如isPageLoaded()或isBackgroundJavaScriptProcessing(),判断页面是否已经加载完成。
  3. 如果以上方法仍然无法解决问题,可以尝试使用其他工具或技术来获取表。例如,可以使用Selenium WebDriver来模拟浏览器行为,或者使用Jsoup来解析HTML页面。

总结起来,HtmlUnit是一个强大的工具,可以用于模拟浏览器行为,实现对Web页面的自动化操作和数据提取。在循环中获取表时,需要注意页面加载时间、异步请求等因素,并采取相应的措施来解决问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java写爬虫,你试过嘛?

这里的思路是调用两次按钮点击事件对应方法,第一次click返回page,获取按钮Element调用一次返回的page直接输出为IO, 按钮的多次点击之间,页面会通过js动态生成Element。...如果两次点击事件串行触发,可能需要的Element数据没有加载出来,获取不到第二次的按钮元素。报NullPointException。这个处理是让线程sleep了一秒。...当前代码同一个页面不支持多次按钮点击下载,如果因为一次下载完无法获取到当前页面了,所以不能并行操作,解决办法现在还没想到,小伙伴可以留言idea。 剩下的需要注意一些版本依赖问题。...; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.DomElement...; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.google.common.collect.ImmutableMap;

38410

Android利用爬虫实现模拟登录的实现实例

一开始选择的是htmlunit解析登录界面html,pc上测的能实现,结果在android上运行不起来,因为htmlunit利用了javax中的类实现的解析,android不支持javax,所以就跑不起来...(); }catch(Exception e){ System.out.println(e.toString()); } } } 于是接着调研,发现利用jsoup可以android...可以我们的校网竟然没有使用cookie,于是我只能抓包看看post的data有什么,然后把data直接通过post发送,不过不知道我们校网密码的加密的方式,所以填写密码需要先去抓包,抓到自己账号的密文,...点击登录后快速停止监听,获取form data,然后把data中的值填上就好了。...总的来说,如果只是单纯抓取网页内容android这一块利用jsoup还是能实现的,但不支持按钮的点击操作;Htmlunit API更好用,也能模拟点击事件,不过javax android并不支持,服务器还是可以用来抓取数据的

1.3K31
  • 格力与奥克斯空调在京东的选购指数(java爬虫案例-代码实现)

    jd页面数据绝大多数是通过Ajax请求获取的,我用浏览器调试工具(F12),发现这些Ajax很复杂,多层调用,并且关键数据做了些混淆,就是直接去请求Ajax链接返回的数据还需要通过特定JS处理,得到原有数据...一直被卡住了,最后通过一个HttpUnit(带JS解析器,可以爬取动态页面)。...项目分析 主要是想爬格力和奥克斯 空调的各型号的选购指数,顺带把商品标题、价格、评论人数、店铺、选购指数等都爬了一遍, 由于一个系列,有多个型号(大小匹数),这个系列的选购指数是差别不大了,就不用都爬了...; 添加依赖 使用Spring Boot+Spring Data JPA和定时任务进行开发,HtmlUnit获取动态网页,Jsoup解析页面。...--HtmlUnit--> net.sourceforge.htmlunit

    2.8K20

    接口优化方案实践

    如果要查平台,即组织的根节点,这种情况下,需要查询的数据量非常大,接口响应就可能会非常慢。 事实证明不是这个原因。 很快有个同事给出了答案。...因为如果在评价中冗余一个组织code字段,万一哪天组织中的组织code有修改,不得不通过某种机制,通知我们同步修改评价的组织code,不然就会出现数据不一致的问题。...第二次优化 由于需要在for循环中,每条记录都要根据不同的条件,查询出想要的数据。 只一个线程中查询数据,显然太慢。 那么,为何不能改成多线程调用?...第二次优化,查询数据库由单线程改成多线程。 但由于该接口是要将查询出的所有数据,都返回回去的,所以要获取查询结果。...这样不是变慢了吗? 答:如果那5批调用评价查询接口的操作,是for循环中单线程顺序的,整体耗时当然可能会变慢。 业务系统也可以改成多线程调用,只需最终汇总结果即可。

    1.1K80

    从20s优化到500ms,我用了这三招

    如果要查平台,即组织的根节点,这种情况下,需要查询的数据量非常大,接口响应就可能会非常慢。 事实证明不是这个原因。 很快有个同事给出了答案。...因为如果在评价中冗余一个组织code字段,万一哪天组织中的组织code有修改,不得不通过某种机制,通知我们同步修改评价的组织code,不然就会出现数据不一致的问题。...第二次优化 由于需要在for循环中,每条记录都要根据不同的条件,查询出想要的数据。 只一个线程中查询数据,显然太慢。 那么,为何不能改成多线程调用? 第二次优化,查询数据库由单线程改成多线程。...这样不是变慢了吗? 答:如果那5批调用评价查询接口的操作,是for循环中单线程顺序的,整体耗时当然可能会变慢。 业务系统也可以改成多线程调用,只需最终汇总结果即可。...JVM中获取锁和释放锁的流程;JUC包的核心结构——AQS的原理与源码实现,通过逐方法、逐行的解释,帮助读者彻底掌握AQS中提供的获取锁、释放锁、条件变量等操作的实现与原理。

    61470

    一致性哈希算法的问题

    本文将从如下三个方面探探一致性哈希算法 一致性哈希算法经典实用场景 一致性哈希算法通常不适合用于服务类负载均衡 面试应对之策 1、一致性哈希算法经典使用场景 在数据库存储领域如果单数据量很大,通常会采用分库分...分布缓存领域,对数据存在新增与查询,即数据通过路由算法存储某一个节点后,查询时需要尽量路由到同一个节点,否则会出现查询未命中缓存的情况,这也是与分布式服务调用领域的负载算法一个不同点。...这样通过为不同的的实际节点映射不同的虚拟节点,实现数据的均匀分布,并且扩容或缩容时并不会出现大面积的缓存穿透。...一致性哈希算法的两个关键: 顺时针选择节点 可以使用TreeMap,一来具备排序功能,天然提供了相应的方法获取顺时针的一个元素。...,比轮、加权轮、随机、加权随机算法等负载均衡算法相比,实现复杂,性能低下,运维管理复杂。

    4.1K20

    关于“Python”的核心知识点整理大全6

    为此,我们可以分 别获取名单中的每个名字,这种做法会导致多个问题。例如,如果名单很长,将包含大量重复 的代码。另外,每当名单的长度发生变化时,都必须修改代码。...4.1.2 for 循环中执行更多的操作 for循环中,可对每个元素执行任何操作。下面来扩展前面的示例,对于每位魔术师,都 打印一条消息,指出他的表演太精彩了。...例如,你可能使用for 环来初始化游戏——遍历角色列表,将每个角色都显示到屏幕上;再在循环后面添加一个不缩进 的代码块,屏幕上绘制所有角色后显示一个Play Now按钮。...通过查看这样的错误示 例,有助于你以后避开它们,以及它们出现在程序中时进行修复。 下面来看一些较为常见的缩进错误。...4.2.2 忘记缩进额外的代码行 有时候,循环能够运行而不会报告错误,结果可能会出乎意料。试图环中执行多项任 务,却忘记缩进其中的一些代码行时,就会出现这种情况。

    11010

    游戏如何限制程序多开

    破解方法: (1)hook 游戏的 OpenFileMapping,拷贝一份独占文件副本并重命名,让他获取文件副本的句柄而不是原文件句柄。...(2)循环遍历游戏的句柄,删除指定的 File 类型的句柄 5,多个操作系统账号 现象:游戏通过限制一个用户只能打开一个游戏来防止重复打开。...而不是只能开1个,通过把程序实例信息放到跨进程的内存映射文件中,防止游戏多开。...而不是只能开1个 ,DLL全局共享区映射到各个进程的地址空间时仅被初始化一次,且是第一次被windows加载时,所以利用该区数据就能对程序进行多开限制。...注意游戏可能会多次获取 mac ,所以不要将 mac 完全随机,避免第一次获取的 mac 和第二次获取的 mac 不一样,这就很尴尬。

    1.4K10

    常见负载均衡策略「建议收藏」

    基于这个前提,轮调度是一个简单而有效的分配请求的方式。然而对于服务器不同的情况,选择这种方式就意味着能力比较弱的服务器也会在下一轮循环中接受轮,即使这个服务器已经不能再处理当前这个请求了。...值得注意的是,流量率低的配置环境中,各服务器的流量并不是相同的,会优先考虑第一台服务器。...根据服务器整体负载情况,有两种策略可以选择:常规的操作中,调度算法通过收集的服务器负载值和分配给该服务器的连接数的比例计算出一个权重比例。因此,如果一个服务器负载过大,权重会通过系统透明地做调整。...加权响应 Weighted Response: 流量的调度是通过加权轮方式。加权轮中 所使用的权重 是根据服务器有效性检测的响应时间来计算。...但是需要注意的是,这种方式假定服务器心跳检测是基于机器的快慢,但是这种假设也许不是总能够成立。

    6.7K30

    负载均衡调度算法大全

    基于这个前提,轮调度是一个简单而有效的分配请求的方式。然而对于服务器不同的情况,选择这种方式就意味着能力比较弱的服务器也会在下一轮循环中接受轮,即使这个服务器已经不能再处理当前这个请求了。...值得注意的是,流量率低的配置环境中,各服务器的流量并不是相同的,会优先考虑第一台服务器。...根据服务器整体负载情况,有两种策略可以选择:常规的操作中,调度算法通过收集的服务器负载值和分配给该服务器的连接数的比例计算出一个权重比例。...加权响应(Weighted Response) 流量的调度是通过加权轮方式。加权轮中所使用的权重是根据服务器有效性检测的响应时间来计算。每个有效性检测都会被计时,用来标记它响应成功花了多长时间。...所有服务器虚拟服务上的响应时间的总和加在一起,通过这个值来计算单个服务物理服务器的权重;这个权重值大约每15秒计算一次。

    6.3K30

    啥是无头浏览器,都能干啥?一文说清楚

    用户键入、单击或以其他方式与页面元素交互的每个点都是可能出错的点,您最好在测试阶段发现并修复问题,而不是几周甚至几个月后发现故障,那时投诉就会蜂拥而至。...一个无头测试环境,你可以编写和执行脚本: 测试基本流程和可选流程 模拟单击链接和按钮 自动填写和提交表格 测试SSL性能 尝试不同的服务器负载 获取关于页面响应时间的报告 获取有用的网站代码 截屏查看结果...这个无头的WebKit可以通过JavaScript API编写脚本,并使用CasperJS来处理测试。PhantomJS能够模拟完整的导航场景,可以显示用户浏览时可能遇到错误的所有地方。...使用HtmlUnit,你可以Chrome、Firefox 38及以后版本、Edge、IE8和IE11中创建脚本化用例。...糟糕的用户界面意味着糟糕的用户体验,快节奏的网络世界里,消费者会放弃这样的网站,转而在竞争对手的平台进行购物。HtmlUnit是一个有用的朋友,特别是你的工作,以打造一个业务网站与优越的性能为主。

    1.7K10

    Python数据容器:集合

    本篇文章参考:黑马程序员一、集合的定义我们目前已经学习了列表、元组、字符串三个数据容器了,基本能满足大多数的使用场景,为何又需要学习新的集合类型呢?...for循环遍历列表3.for循环中将列表的元素添加至集合4.最终得到元素去重后的集合对象,并打印输出my_list = ['新闻', '传播', '新闻', '传播', 'Hi', 'Python',...'Hi', 'Python', 'best']# 定义一个空集合my_set=set()# 通过for坏遍历列表for element in my_list: # for坏中将列表元素添加至集合...my_set.add(element)print(f"列表的内容为{my_list}")print(f"通过for坏得到的集合为{my_set}")输出结果:列表的内容为'新闻', '传播',...'新闻', '传播', 'Hi', 'Python', 'Hi', 'Python', 'best'通过for坏得到的集合为{'Hi', '传播', '新闻', 'Python', 'best'}

    8031

    Kafka消费者的使用和原理

    我们可以通过减小自动提交的时间间隔来减小重复消费的窗口大小,这样仍然无法避免重复消费的发生。...中使用异步提交,而当关闭消费者时,再通过同步提交来保证提交成功。...若未来得及提交,也会造成重复消费,如果还想更进一步减少重复消费,可以for循环中为commitAsync和commitSync传入分区和偏移量,进行更细粒度的提交,例如每1000条消息我们提交一次:...cas操作获取锁,如果cas失败,即获取锁失败,表示发生了竞争,有多个线程使用KafkaConsumer,则会抛出ConcurrentModificationException异常,如果cas成功,还会将...第4步,安全的唤醒消费者,并不是唤醒,而是检查是否有唤醒的风险,如果程序执行不可中断的方法或是收到中断请求,会抛出异常,这里我还不是很明白,先放一下。

    4.4K10

    【Java】爬虫,看完还爬不下来打我电话

    按照陈树义前辈《聊聊整体性学习方法》一文中提到的思想,本文思路如下: 获取:目前都有哪些爬虫技术? 理解:这些爬虫技术的特色是什么? 扩展:快速上手一下cdp4j爬虫技术。...其实各有各自的特色,弱水三千,我想全喝,没有那个能力。所以目前只饮一瓢,就是cdp4j了。...小结 ​ 说白了,cdp4j就是一个模拟浏览器,区别于HtmlUnit,这里是真的用到了浏览器,如果代码写的不对,还会弹出浏览器,吓你一跳 : ) ​ 目前只是简简单单的获取到了渲染后的html,真正的爬虫可不仅仅就这...自风老师码云的issue里面亲身教学:Chrome获取XPath的方法 整了半天,原来人家Chrome浏览器早就替我们实现好了,就知道我们要用到xPath干坏事。 xPath具体怎么用?...,区别就在于,人类是通过html页面渲染,而浏览器是通过 解析json 动态加载的: 打开国内新闻链接:https://news.163.com/domestic/ 从上面链接获取获取渲染后的html内容

    2K10

    异步,同步,阻塞,非阻塞程序的实现

    什么是异步,同步,阻塞,非阻塞 写这篇文章前,我对这四个概念是非常模糊的。 同步,异步 异步同步的差异,在于当线程调用函数的时候,线程获取消息的方式....如果是同步,线程会等待接受函数的返回值(或者轮函数结果,直到查出它的返回状态和返回值)。如果是异步,线程不需要做任何处理,函数执行完毕后会推送通知或者调用回调函数。...当线程调用函数,线程就被挂起,函数结束前什么都干不了。这就是阻塞。 反之,当线程调用函数,线程还能干其它事。这就是非阻塞。此时,函数一般会立即返回状态,而不是等待求值。以免阻塞住线程。...线程同步调用下,也能非阻塞(同步轮非阻塞函数的状态),异步下,也能阻塞(调用一个阻塞函数,然后函数中调用回调,虽然没有什么意义)。 下面,我会慢慢实现一个异步非阻塞的sleep。...上面的代码中,一个while循环中timer的状态。由于timer存在于wait中。所以需要把timer“提取”出来。

    7.5K10

    超全 | 只有高手才知道的C语言高效编程与代码优化方法(二)

    这里的语法有点奇怪,确实合法的。循环中的第三条语句是可选的(无限循环可以写为for(;;))。...如果你需要在循环中做很多工作,那么你并不适合处理器的指令缓存。 这种情况下,两个分开的循环可能会比单个循环执行的更快。...对于实时系统,精确性不是特别重要,sin、cos查找可能更合适。 当使用查找时,尽可能将相似的操作放入查找,这样比使用多个查找更快,更能节省存储空间。...如果你能缓存经常用的数据而不是重新计算,这便能更快的访问。 比如sine和cosine查找,或者伪随机数。 尽量不在循环中使用++和–。...递归可能优雅而简单,需要太多的函数调用; 不在循环中使用sqrt开平方函数,计算平方根非常消耗性能; 一维数组比多维数组更快; 编译器可以一个文件中进行优化-避免将相关的函数拆分到不同的文件中

    3.8K20

    SQLSERVER 存储过程 语法

    三、Insert INTO Select 四、补充:临时 临时存储系统数据库tempdb中 临时会被系统隐式地丢弃 ——————————————————— 五、存储过程...系统SP,主要存储master 数据库中,并以sp_为前缀并且系统存储过程主要是从系统获取 信息,从而为系统管理员管理SQL Server。...,而不记录单个行删除操作,不能带条件 /* TRUNCATE TABLE 功能上与不带 Where 子句的 Delete 语句相同:二者均删除中的全部行 。...TRUNCATE TABLE 通过 释放存储数据所用的数据页来删除数据,并且只事务日志中记录页的释放。...TRUNCATE TABLE 删除中的所有行,结构及其列、约束、索引等保持不变。新行标识所用 的计数值重置为该列的种子。如果想保留标识计数值,请改用 Delete。

    2.6K20

    旋转字符串算法由浅入深

    总结下来此问题的算法大约有五个,这是分得很细的情况下,前面的两个是自己想的,后面的三个参考了一个叫July的大神的思路。其实这些算法总体的思路大同小异,这些细节问题也让我的思维有了很大的开阔。...上面的思路最简单,时间复杂度却不是很理想。下面是改进的算法,实现三次交换,而不是双重循环。交换的时间复杂度是线性的。...是不是很简单,大部分人想到这里就应该会放弃了,包括我也是这样,解决问题的方式永远不止一两种,只有少部分人相信了这种话,所以,相信的现在都变大神了,大神July就是这样的,下面的几种思路保证让你大开眼界...int pHead, int pTail, bool pFlag) 8 { 9 /* pHead = 待处理的头元素,pTail = 待处理的尾元素 10 * pFlag = 左还是右的标志...以上的算法思想,是非常低级的,一切没有涉及数据结构的算法都是非常低级的算法,这些算法或多或少不同的程度上打开了我们的思维,对以后的学习会有很多的帮助。

    78670

    Java代码评审歪诗!让你写出更加优秀的代码!

    验-言 公共方法都要做参数的校验,参数校验不通过明确抛出异常或对应响应码: Java Bean验证已经是一个很古老的技术了, 会避免我们很多问题; 接口中也明确使用验证注解修饰参数和返回值, 作为一种协议要求调用方按验证注解约束传参...-勋 不要在循环中调用服务,不要在循环中做数据库等跨网络操作; 频-品 写每一个方法时都要知道这个方法的调用频率,一天多少,一分多少,一秒多少,峰值可能达到多少,调用频率高的一定要考虑性能指标,考虑是否会打垮数据库...另外一定要通过log4j打印日志而不是直接把日志打印到控制台。 典型错误示例: ?...接-洁 接口是用来隔离变化的,如果一个业务有几种不同的形态,都有相同的处理,那么可以定义接口来隔离业务形态的不同,服务调用处,通过业务类型字段来获得不同的服务类。...但是mq解耦的方式不能滥用,同一系统内不宜过多使用mq消息来做异步,要尽可能保证接口的性能,而不是通过mq防止出问题后重新消费。

    5.4K20
    领券