怎么样判断Phantomjs与web上的js交互完成

主流解决方案有两种方式:1. 记录所有发送的request数目,然后查看所有response的数目,直到response的数目等于request的数目。phantoms有api可以支持记录所有的request和response的数目。2. 通过页面的ajax结束之后的dom状态判断是否完成。比如你改了某个标签,那就一直wait,看这个标签是否已经改完了,完成则代表整个页面加载完。不过,其实这两种方案各有各的缺点。对于方案1,每收到一个response,你就要判断当前的request和response是否相等了。于是便会出现request和response相等了,但是其实还有request没有发出去的情况。所以,在判断的时候一般还要加个timer out,过个几秒在重新判断一次,即使这样,也有漏判的情况。对于方案2,因为页面可能有一堆ajax请求,所以,就的对所有的ajax请求的dom元素修改都进行判断,否则就有可能造成,有的ajax请求已经完成,但是有的还没有完成的情况。酌情处理吧,页面是否加载完成本身就是个挺恶心的事。================这个在stack overflow上有答案了,原来看到过,具体实现可以找找那个答案。
■网友
我也遇到同样的问题,请问楼主有没有好方法去解决。
■网友
可以选取几个 只有在 js 加载完之后 才出现的标签或元素, 通过判断他们是否出现, 可以推断页面是否已经加载完毕. 但通常你只需要 找几个你关心的 即可, 不需要全部加载完全 .顺便给个样例:from selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditionstime_out = 5element_xpath = \u0026#39;//*/div/div\u0026#39;wait = WebDriverWait(self.driver, time_out).until( expected_conditions.presence_of_element_located((By.XPATH, element_xpath)))if wait: # do your work here


    推荐阅读