質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

2回答

881閲覧

pythonとseleniumを使い作業を自動化しようとしています。

takuyaK.

総合スコア5

Python

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2020/05/18 08:42

###seleniumを使いclickの自動化をしようとしています

classがnotLearningになっているものを選択し、上から順番にクリックしていくようにしたいのですが以下のようなエラーが出て困っています。

発生している問題・エラーメッセージ

Message: stale element reference: element is not attached to the page document

該当のソースコード

python

1//自動化しようとしているページのHTML 2<tr class="notLearning odd"> 3 <th></th> 4 <td> 5 <a href =""><img></a> 6 </td> 7 <td> 8 </td> 9</tr> 10 11//自分のコード 12not_learned = driver.find_elements_by_xpath('//tr[contains(@class, "notLearning")]/td[2]/a') 13 14for i in not_learned: 15 i.click() 16 driver.back()

試したこと

下記のコードのように一度、srcにそれぞれのsrc属性を収納し、それを順番にクリックしていくように処理したのですがうまくいきませんでした。こちらのエラーメッセージも上と同じでした。

python

1src = [] 2for j in not_learned: 3 src.append(j.get_attribute('src')) 4for j in src: 5 driver.find_element_by_xpath('//img[contains(@src, j)]').click()

補足情報(FW/ツールのバージョンなど)

aタグ内のhrefは省略しております。
プログラミング初心者なため説明不足なところもあると思いますが、その辺も含めて説明していただけるとありがたいです。また、このページは3ページあるため一番最後の要素をクリックしおえたら次のページのリンクをクリックできるようにしたいと考えています。

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

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

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

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

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

guest

回答2

0

ご指摘していただいた方のwhile True:を基に
例外処理と組み合わせて以下のようなコードを書いてみました。

python

1#class="notLearningを見つけ、上から順にクリック 2#そのページにclass="notLearningがなくなれば次のページ 3#次のページもなくなれば処理を終了 4while True: 5 try: 6 not_learned = driver.find_element_by_xpath('//tr[contains(@class, "notLearning")]/td[2]/a') 7 not_learned.click() 8 driver.back() 9 except NoSuchElementException: 10 try: 11 driver.find_element_by_xpath('//li[@class="next"]/a').click() 12 except NoSuchElementException: 13 break 14

投稿2020/05/19 05:22

takuyaK.

総合スコア5

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

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

0

ベストアンサー

Message: stale element reference

画面遷移してるのに、古い画面のノードを参照しています。
ページ遷移したら、ノードを取得し直しましょう。

Python

1while True: 2 未学習のノードをリストで取得 3 if それが空リスト: 4 break 5 リストの先頭ノードをクリック 6 バック

でしょうか。

投稿2020/05/18 08:48

編集2020/05/18 08:51
otn

総合スコア85901

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

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

takuyaK.

2020/05/18 13:45 編集

ありがとうございます、解決できました! この後にclassがnextのものを選択し次のページに移り、再度同じ作業を展開したいのですがbreakのところを以下のように変更したとこをno such element: Unable to locate element:{"method":"xpath","selector":"//tr[contains(@class, "notLearning")]/td[2]/a"}となりました。これは何処がいけないのでしょうか? next_btn = driver.find_element_by_class_name('next') next_btn.click() if next_btn == '': break
otn

2020/05/18 13:47

コード全体を質問文にコードブロックで書いてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問