MR_AndroidViewClient: Getting Browser’s HTML page source

來源:互聯網
上載者:User

Standard Android Browser does not provide an option in its menu to view the HTML page source. Some workarounds like installing apps and then usingShare page from
Browser's menu has been described and also the use of Javascript and JQuery to add to a page has been detailed, but we are hungry for more. Needless to say, all these methods involve some manual step so I felt the need to find a completely
automatic way of doing it.

Of course, to do it I would resort to our old pal
AndroidViewClient. This is a very interesting example of its use because it lies far from testing and application or UI.

And so, without further ado, let me introduce you to the code...

#! /usr/bin/env monkeyrunner'''Copyright (C) 2012  Diego Torres MilanoCreated on Oct 12, 2012@author: diego'''import reimport sysimport os# This must be imported before MonkeyRunner and MonkeyDevice,# otherwise the import fails.# PyDev sets PYTHONPATH, use ittry:    for p in os.environ['PYTHONPATH'].split(':'):        if not p in sys.path:            sys.path.append(p)except:    passtry:    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))except:    passfrom com.dtmilano.android.viewclient import ViewClientfrom com.android.monkeyrunner import MonkeyRunner, MonkeyDeviceVPS = "javascript:alert(document.getElementsByTagName('html')[0].innerHTML);"PACKAGE = 'com.android.browser'ACTIVITY = '.BrowserActivity'COMPONENT = PACKAGE + "/" + ACTIVITYURI = 'http://dtmilano.blogspot.com'device, serialno = ViewClient.connectToDeviceOrExit()device.startActivity(component=COMPONENT, uri=URI)MonkeyRunner.sleep(3)vc = ViewClient(device=device, serialno=serialno)device.drag((240, 180), (240, 420), 10, 10)url = vc.findViewByIdOrRaise('id/url')url.touch()MonkeyRunner.sleep(1)device.press('KEYCODE_DEL', MonkeyDevice.DOWN_AND_UP)for c in VPS:    device.type(c)device.press('KEYCODE_ENTER', MonkeyDevice.DOWN_AND_UP)MonkeyRunner.sleep(3)vc.dump()print vc.findViewByIdOrRaise('id/message').getText().replace('\\n', "\n")device.press('KEYCODE_BACK', MonkeyDevice.DOWN_AND_UP)

And now a brief explanation of the most important pieces of this script.

  1. Shebang, you know, to invoke monkeyrunner as the interpreter. I don't have to tell you more (if you are a poor Windows user you may have to invoke monkeyrunner from command
    line, I feel sad for you)
  2. Some comments and imports
  3. Read PYTHONPATH just in case you are using Eclipse and Pydev (this has been explained in thispost)
  4. Then use ANDROID_VIEW_CLIENT_HOME environment variable to findAndroidViewClient in your system
  5. Some constants defined. VPS is the actual javascript to obtain the page source
  6. The standard way of connecting to the device or emulator in AndroidViewClient. This handles errors and timeout automatically solving many problems you find with bare monkeyrunner
  7. We start Browser
  8. Drag a bit to make the URL visible in case the page has scrolled
  9. Next, we find the View with ID id/url, which you know, contains the URL
  10. We touch to focus
  11. And type the javascript in VPS followed by ENTER
  12. By that time the alert dialog should be on screen so we take a new dump
  13. Now we find the View with ID id/message which contains theHTML and print it
  14. Finally, we press BACK to dismiss it
I hope you have enjoyed it as much as I did and this help you find new ways of using AndroidViewClient.P.S. This script will be part of AndroidViewClient source code distribution examples

轉載自:http://dtmilano.blogspot.com/search/label/AndroidViewClient

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.