问题引入
在写一些自动控制的时候,偶然发现在爬取由于JS函数导致该HTML页面发生变化的网页时,会爬不到节点
这里是发现了两个问题
-
一.在运用selenium获取DOM节点的时候,你打开了网页控制台,已谷歌为例,光标选中你要获取的节点,然后锁定HTML代码中该节点的位置,右键点击该节点标签,会有Copy选项下拉框,可以复制该节点的Xpath,然后你运用find_element_by_xpath函数获取,这时就容易忽略一个问题,你获取的节点ID可能形如el466123,总之就是名称后面跟一串无意义数字的形式,你要注意了,可能,这个节点的ID属性是随机的,所以这里需要换一下这个节点的定位描述,例如某某固定ID节点下的第几个节点
-
二.也可能是由于当前节点还未生成完毕,无法获取,需要等待一会
例如:driver.find_element_by_xpath("//*[@id='form_command_bar']/li[1]/a").click() #这里点击了一个超链接,JS在后台处理时在当前HTML代码尾部生成了新的节点
我如果直接对新产生节点动作
driver.find_element_by_xpath("该位置填写新生成节点的Xpath").click()
这里八成不会产生预期效果,因为这些新的代码还没加载出来
如何解决?#之前导入time模块 time.sleep(3) driver.find_element_by_xpath("该位置填写新生成节点的Xpath").click()
在动作之前等待适当时间即可生效