def crawl_main_nodes(plan, app, device, page_before_run): device.update_uncrawled_nodes(page_before_run) page_now = PageInfo.Page() if pageController.page_is_crawlable(app, device, page_before_run): device.update_crawl_page(page_before_run.nodesInfoList) if page_before_run.clickableNodesNum > 0: page_now = crawl_clickable_nodes(plan, app, device, page_before_run, page_now, False) if page_before_run.longClickableNodesNum > 0: page_now = crawl_longclickable_nodes(plan, app, device, page_before_run, page_now, False) if page_before_run.editTextsNum > 0: page_now = crawl_edittext(plan, app, device, page_before_run, page_now, False) del plan, app, device, page_before_run return page_now
def crawl_clickable_nodes(plan, app, device, page_before_run, page_now, init): for node in nodeController.get_random_nodes( page_before_run.clickableNodes): # if crash and not keep run , break from deep run .page_need_crawled will be None if page_now is None: Saver.save_crawler_log(device.logPath, 'Jump out to crawl') del node break # sometimes the need tap node is not shown after one deep run if not nodeController.recover_node_shown(plan, app, device, page_now, page_before_run, node): Saver.save_crawler_log(device.logPath, 'node not shown , crawl next .') del node continue device.save_screen(node, True) appController.tap_node(device, node) device.update_crawled_activity(node.currentActivity) device.update_crawled_nodes(node.nodeInfo) device.delete_uncrawled_nodes(node.nodeInfo) # if jump out the test app, try to go back & return the final page page_after_operation = pageController.check_page_after_operation( plan, app, device, page_before_run, node) if page_after_operation is None: Saver.save_crawler_log(device.logPath, 'Jump out to crawl') page_now = page_after_operation break # compare two pages before & after click . # update the after page . leave the new clickable/scrollable/longclickable/edittext nodes only. page_now = pageController.get_need_crawl_page(plan, app, device, page_before_run, page_after_operation) if pageController.page_is_crawlable(app, device, page_now): page_now.add_last_page(page_before_run) page_now.add_entry(node) # deep run if init: page_now = crawl_init_nodes(plan, app, device, page_now) else: page_now = crawl_main_nodes(plan, app, device, page_now) # if page no crawlable nodes , back to last Page, until has crawlable nodes, if back time >3, break page_now = pageController.recover_page_to_crawlable( plan, app, device, page_now) del node del plan, app, device, page_before_run, init return page_now