示例#1
0
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
示例#2
0
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