🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

479閲覧

Pythonデバッグの取り方について

yuya-genius

総合スコア5

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/09/22 08:29

編集2019/09/22 14:20

pythonにて下記のプログラムを実行したところ、予期せぬ場面で停止します。
原因がわからず、なにから施すべきかすらわかっていません。

ググって出てくるようなデバッグ措置を実施し、プログラムの問題点を洗い出す様にすべきでしょうか。

質問の意図が広くなりすいません。
どんなお言葉も受け止めますので、何卒ご指摘頂けますと幸いです。

python

1from selenium import webdriver 2from selenium.common.exceptions import WebDriverException 3from selenium.webdriver.common.action_chains import ActionChains 4import time 5import random 6 7def login(): 8 driver.get('https://www.instagram.com/accounts/login/?source=auth_switcher') 9 f = open('insta.txt','a') 10 f.write("instagramにアクセスしました\n") 11 f.close() 12 time.sleep(1) 13 14 #メアドと、パスワードを入力 15 driver.find_element_by_name('username').send_keys('username') 16 time.sleep(1) 17 driver.find_element_by_name('password').send_keys('Passwaord') 18 time.sleep(1) 19 20 #ログインボタンを押す 21 driver.find_element_by_class_name('L3NKy ').click() 22 time.sleep(random.randint(2, 5)) 23 f = open('insta.txt','a') 24 f.write("instagramにログインしました\n") 25 f.close() 26 time.sleep(1) 27 28def tagsearch(tag): 29 instaurl = 'https://www.instagram.com/explore/tags/' 30 driver.get(instaurl + tag) 31 time.sleep(random.randint(2, 10)) 32 f = open('insta.txt','a') 33 f.write("listtagより、tagで検索を行いました\n") 34 f.close() 35 time.sleep(1) 36 37def clicknice(): 38 target = driver.find_elements_by_class_name('_9AhH0')[10] 39 actions = ActionChains(driver) 40 actions.move_to_element(target) 41 actions.perform() 42 f = open('insta.txt','a') 43 f.write("最新の投稿まで画面を移動しました\n") 44 f.close() 45 time.sleep(1) 46 47 try: 48 driver.find_elements_by_class_name('_9AhH0')[9].click() 49 time.sleep(random.randint(2, 10)) 50 f = open('insta.txt','a') 51 f.write("投稿をクリックしました\n") 52 f.close() 53 time.sleep(1) 54 driver.find_element_by_class_name('fr66n').click() 55 f = open('insta.txt','a') 56 f.write("投稿をいいねしました\n") 57 f.close() 58 time.sleep(1) 59 60 except WebDriverException: 61 f = open('insta.txt','a') 62 f.write("エラーが発生しました\n") 63 f.close() 64 return 65 66 for i in range(random.randint(3, 5)): 67 try: 68 driver.find_element_by_class_name('coreSpriteRightPaginationArrow').click() 69 f = open('insta.txt','a') 70 f.write("次の投稿へ移動しました\n") 71 f.close() 72 time.sleep(random.randint(random.randint(2, 5), random.randint(10, 15))) 73 74 except WebDriverException: 75 f = open('insta.txt','a') 76 f.write("2つ目の位置でエラーが発生しました\n") 77 f.close() 78 time.sleep(5) 79 80 try: 81 driver.find_element_by_class_name('fr66n').click() 82 f = open('insta.txt','a') 83 f.write("投稿をいいねしました\n") 84 f.close() 85 time.sleep(2) 86 except WebDriverException: 87 f = open('insta.txt','a') 88 f.write("3acつ目の位置でエラーが発生しました\n") 89 f.close() 90 91if __name__ == '__main__': 92 93 taglist = ['f4f', 'l4l','like4like', 'instagood','followme', 'follow', 'いいね返し'] 94 95 while True: 96 driver = webdriver.Chrome(r'C:\Users*****\Downloads\chromedriver_win32\chromedriver.exe') 97 time.sleep(1) 98 login() 99 100 tagsearch(random.choice(taglist)) 101 clicknice() 102 103 driver.close() 104 105 abc = random.randint(random.randint(20, 100), random.randint(120, 1800)) 106 f = open('insta.txt','a') 107 f.write(str(abc)+"秒待機します\n") 108 f.close() 109 time.sleep(abc)```

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2019/09/22 09:15

コードが読めないので、ソースコードはコードブロック```で囲んでください。
meg_

2019/09/22 13:06

インデントが判らないので、コードは「コードの挿入」で記入してください。
meg_

2019/09/22 15:57

該当サイトはプログラムからのアクセスを許可していますか? 許可していない場合、アクセスをブロックされることもあるかと思います。
yuya-genius

2019/09/22 16:11

許可しているかどうかですが、プログラムの挙動としては アクセス→ログイン→任意のパラメータにて目的の動作の実施 までは確認してますので、いきなりアクセスをブロックされているようには見えないです。 サイト側から何かしらの確認信号などが送られ、その応答がないと一定時間後にアクセスブロックするようなものがあるとするなら、そこに引っかかっている可能性はあるかもしれません。
meg_

2019/09/22 16:24

利用規約ではやはり禁止していますね。(運営から許可を得ている場合を除く)
yuya-genius

2019/09/22 16:35

そうでしたか。 事前調べが足りておらず失礼いたしました。 また、わざわざお手数をおかけ頂きありがとうございます。
guest

回答1

0

デバッグの仕方を説明してみます。

まず、エラーを眺めて、自分の書いたコードエラー原因らしい場所を探します。
ファイル名や行数が記載されていると思いますので、見つけられるはずです。

見ただけで分かればそれでよし。
よく分からなければ、次のコードを該当箇所の前か後ろに記載してブレークポイントを設置してみましょう。

python

1import pdb; pdb.set_trace()

使い方はこの記事に載っているので見てみましょう。
https://qiita.com/musaprg/items/d9f091957475e3088f0e

エラー原因がわかってり、おかしな動作をする位置を特定出来たら、それを元に質問すると回答が得られ安くなると思います。

投稿2019/09/22 08:42

siruku6

総合スコア1382

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuya-genius

2019/09/22 08:56

御丁寧に回答ありがとうございます。 まずは、自分でご指定のコードを組み込み、挙動確かめてみます。
yuya-genius

2019/09/22 09:50

続報です。 import pdb; pdb.set_trace() を使っての挙動の不具合はないように見えました(単純に見落としているかもしれません・・) ただ、それ以前にKeyboardInterruptという表示が出ていたので、動かしているPCに何らかのキーボード操作が入ると止まることがるように見受けられました。
yuya-genius

2019/09/22 09:56

上記は、プログラム動作中にWindowsボタン+Lを押下した際に出たメッセージでした。 が、キーボードボタンに何も触れなくても停止し、その際にはエラーなどは何も吐いていないように見受けられます。
siruku6

2019/09/22 10:18

もしかしたらですが、分岐などの制御文(ifやwhile)で、本来呼び出されてほしい処理がスルーされているのかもしれません。 どこまで処理が呼び出されていて、どこが無視されているのか、確認してみてもいいかもしれません。
yuya-genius

2019/09/22 14:29

回答ありがとうございます。 >もしかしたらですが、分岐などの制御文(ifやwhile)で、本来呼び出されてほしい処理がスルーされてい>るのかもしれません。 >どこまで処理が呼び出されていて、どこが無視されているのか、確認してみてもいいかもしれません。 承知いたしました。 理解の確認なのですが "import pdb; pdb.set_trace()"を実行し分岐を確認⇒コードと見比べながら、スルーされているコードを確認 という手順の実施ということでしょうか。
siruku6

2019/09/23 04:15 編集

"import pdb; pdb.set_trace()"は実行しません。 手順としては、 1 記載 tagsearch()やclicknice()といったメソッドがあると思いますが、それらのメソッドの中に記載する 2 テスト実行 実際にそのメソッドを(ファイルごと?)呼び出してみる 3 確認 import pdb; pdb.set_trace() の位置で処理が停止するので、そこで変数などを呼び出して、実際に入っていてほしいデータが入っているかどうかを確認したり、ifなどの条件式が期待した分岐に入っているかを確認したりします
yuya-genius

2019/09/23 09:47

回答ありがとうございます。 調べつつやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問