LoginSignup
5
6

More than 5 years have passed since last update.

【Python】RoboBrowserを使ってナナコの残高を Slack に送る

Last updated at Posted at 2017-11-21

この記事はRoboBrowserを使ってWebページにログインしてクローリング - TILの転載です


最近、下の本を読んでいる。RoboBrowserと言うものがあるらしいので、使ってみたときのメモ

Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド- | 加藤 耕太 |本 | 通販 | Amazon

なんか、フォームに入力したりするときには Requests で行うのは面倒らしいので、 RoboBrowser を使用するっぽい。

jmcarp/robobrowser

インストール

pip install robobrowser

RoboBrowserは内部でBeautifulSoupを使用しているため、BeautifulSoup4とRequestsは一緒にインストールされる

nanacoのサイトにログインし、残高確認をしてみる

RoboBrowserを使ったプログラムの作成で、nanacoのサイトにログインして、残高を表示するプログラムを作ってみた

ソースはGitHubにあげた

tamago324/post_nanaco_slack: Get nanaco balance info

フォームの送信

フォームを送信するには、まず、フォームを取得する。フォームを取得するにはRoboBrowser.get_form()を使う。引数にformのidを渡すことでフォームを取得できる。

ログインのフォームを取得する

>>> from robobrowser import RoboBrowser
>>> browser = RoboBrowser()
>>> browser.open('https://www.nanaco-net.jp/pc/emServlet')
>>> form = browser.get_form(id='login_card')
>>> form
<RoboForm _PageID=SCBS_PCB1001, _DataStoreID=DSBS_PCB1001_Control, _SeqNo=1509980487174_[ACTIVE]_ExecuteThread:__19__for_queue:__weblogic.kernel.Default_(self-tuning)___, _ControlID=BS_PCB1001_Control, _WID=NoWID, _ORGWID=, _WIDManager=, _preProcess=, _TimeOutControl=, _WIDMode=0, _WindowName=, _ReturnPageInfo=, XCID=, SECURITY_CD=, ACT_ACBS_do_LOGIN2=>

テキストボックスに入力する

テキストボックスの name を指定し、value属性に値を代入する

>>> form['XCID'].value = '1234567891234567'
>>> form['SECURITY_CD'].value = '1234567'

フォームの送信

送信するときにはRoboBrowser.submit_form()を使う。引数に値を入力したフォームを渡す。送信後の状態が browser に入っているため、selectなどで要素を取得できる。

>>> browser.submit_form(form)
>>> browser.select('#cardzan > span.time')
[<span class="time">2017年11月05日23時59分時点</span>]

あとはごちゃごちゃ取っていく(適当)


書いている最中になんかエラーが出た

エラー内容

/Users/tamago324/.local/share/virtualenvs/robobrowser-zDYVPytv/lib/python3.6/site-packages/bs4/__init__.py:181: UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("html.parser"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.

The code that caused this warning is on line 60 of the file nanaco_zan.py. To get rid of this warning, change code that looks like this:

 BeautifulSoup(YOUR_MARKUP})

to this:

 BeautifulSoup(YOUR_MARKUP, "html.parser")

  markup_type=markup_type))
Traceback (most recent call last):
  File "nanaco_zan.py", line 60, in <module>
    main()
  File "nanaco_zan.py", line 13, in main
    loginedForm = login(browser)
  File "nanaco_zan.py", line 40, in login
    browser['XCID'].value = NANACO_NUM
TypeError: 'RoboBrowser' object is not subscriptable

解決策

インスタンス生成時にparserを指定すればいいらしい

>>> browser = RoboBrowser(parser='html.parser')

python - Robobrowser BeautifulSoup error - Stack Overflow

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6