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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

受付中

Python selenium エラーを解決したい

mnl
mnl

総合スコア2

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

1回答

0リアクション

0クリップ

206閲覧

投稿2022/09/20 10:30

pythonで下記のサイトのゲームをプレイするプログラムをseleniumで作っていたのですが、
エラーが解決できないので質問させていただきました。
サイト→http://orteil.dashnet.org/experiments/cookie/
クッキーをクリックしてアイテムを買うだけのゲームです。

プログラムの内容は
(1) 5秒間クッキーをクリックし続ける。
(2) その後、溜まったポイントで買えるだけアイテムを高価な順に買う。
また(1)に戻る。
この動作を5分間繰り返したいです。

エラー内容は

price_tag = driver.find_element(By.CSS_SELECTOR, f"#{store} b").text
の部分で

Traceback (most recent call last):
File "/home/usrname/programming/python/day-48/cookies_bot.py", line 28, in <module>
price_tag = driver.find_element(By.CSS_SELECTOR, f"#{store} b").text
File "/home/usrname/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webelement.py", line 84, in text
return self._execute(Command.GET_ELEMENT_TEXT)['value']
File "/home/usrname/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webelement.py", line 396, in _execute
return self._parent.execute(command, params)
File "/home/usrname/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 428, in execute
self.error_handler.check_response(response)
File "/home/usrname/.local/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 243, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
(Session info: chrome=105.0.5195.125)
Stacktrace:
#0 0x55c9fba73693 <unknown>
#1 0x55c9fb86cb0a <unknown>
#2 0x55c9fb86fb57 <unknown>
#3 0x55c9fb86f9ff <unknown>
#4 0x55c9fb86fcbc <unknown>
#5 0x55c9fb89feae <unknown>
#6 0x55c9fb8c2922 <unknown>
#7 0x55c9fb899d53 <unknown>
#8 0x55c9fb8c2a8e <unknown>
#9 0x55c9fb8d64b0 <unknown>
#10 0x55c9fb8c2743 <unknown>
#11 0x55c9fb898533 <unknown>
#12 0x55c9fb899715 <unknown>
#13 0x55c9fbac37bd <unknown>
#14 0x55c9fbac6bf9 <unknown>
#15 0x55c9fbaa8f2e <unknown>
#16 0x55c9fbac79b3 <unknown>
#17 0x55c9fba9ce4f <unknown>
#18 0x55c9fbae6ea8 <unknown>
#19 0x55c9fbae7052 <unknown>
#20 0x55c9fbb0171f <unknown>
#21 0x7f3fb21e3b43 <unknown>

と出ます。

10秒ほどは動いているのですが途中で上のエラーが出て止まってしまいます。
よろしくお願いいたします。

python

from selenium import webdriver from selenium.webdriver.common.by import By import time chrome_driver_path = "/home/usrname/programming/developper_tools/chromedriver" driver = webdriver.Chrome(executable_path=chrome_driver_path) driver.get("http://orteil.dashnet.org/experiments/cookie/") cookie = driver.find_element(By.ID, "cookie") #クリックするクッキー store_tags= driver.find_elements(By.CSS_SELECTOR, "#store div") #アイテム store_id = [store.get_attribute("id") for store in store_tags] #アイテムのid(htmlのid属性) store_id = [store.replace(" ", "\ ") for store in store_id] #アイテムのid名のスペースの前バックスラッシュを入れる next_time = time.time() + 5 #クッキーをクリックし続ける5秒間 end_time = time.time() + 5*60 #終了の時刻 #動作の内容 while True: cookie.click() #クッキーをクリック if next_time < time.time(): #5秒経過後にアイテムを買う while True: #アイテムを何個も買う all_items = {} #アイテムとidを格納する辞書 for store in store_id: #アイテムの値段とidの組み合わせを辞書に入れる print(store) price_tag = driver.find_element(By.CSS_SELECTOR, f"#{store} b").text # エラーの部分 price = price_tag.split() try: p = price[-1].replace(",","") except IndexError: pass all_items[store] = int(p) money_tag = driver.find_element( By.CSS_SELECTOR, "#game #money").text.replace(",", "") #所持しているお金を求める money = int(money_tag) affordable_upgrade = {} #買うことができるアイテムとそのidの辞書 for id, cost in all_items.items(): if money > cost: affordable_upgrade[id] = cost if len(affordable_upgrade) == 0: # 買うことができるアイテムがないならループを抜け出す break max_item_id = max(affordable_upgrade, key=affordable_upgrade.get) #買えるアイテムの中で一番高価なもの (いらないかも) click_shop = driver.find_element(By.ID, max_item_id) #買うアイテムのid click_shop.click() #アイテムを買う next_time = time.time() + 5 #次の5秒間 if time.time() > end_time: #5分経過したら終わる cookie_per_socond = driver.find_element(By.ID, "cps") print(cookie_per_socond.text) break

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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