だから、私は16歳で、Pythonには初めてです。私は私が学ぶのを助けるために行うために、プロジェクトを必要とするので、私はプロジェクトとしてプレイステーションプラスコードジェネレータで上がってきたこれまでのところそれがない:Selenium Pythonでバウチャーコード入力を自動化しようとしています
はソニーのサイト -Entersでアカウント管理へのコード -logsを-Generatesエラーが
voucher_box = driver.find_element_by_id("voucherCode")
redeem_button = driver.find_element_by_id("redeemGiftCardButton")
while i < amount:
voucher_box.clear()
currentcode = codegen.codegen()
voucher_box.send_keys(currentcode)
redeem_button.click()
if "The Prepaid Card code you entered is incorrect or is no longer valid" in driver.page_source:
print("Error found")
else:
print("Error not found")
i += 1
を発生した場合にのみONCE行わ場合は、たとえば、私は2に金額を設定している場合、私は私のエラーメッセージ「エラーが見つかりました」を取得、完全に正常に動作し、それがクラッシュしたセクション -Checksを償還時のコードと私にこれを与える:
Traceback (most recent call last):
File "C:/Users/M4SS3CR3/PycharmProjects/UKP/main.py", line 38, in <module>
voucher_box.clear()
File "C:\Users\M4SS3CR3\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 87, in clear
self._execute(Command.CLEAR_ELEMENT)
File "C:\Users\M4SS3CR3\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 461, in _execute
return self._parent.execute(command, params)
File "C:\Users\M4SS3CR3\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
self.error_handler.check_response(response)
File "C:\Users\M4SS3CR3\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: Element not found in the cache - perhaps the page has changed since it was looked up
Stacktrace:
at fxdriver.cache.getElementAt (resource://fxdriver/modules/web-element-cache.js:9454)
at Utils.getElementAt (file:///C:/Users/M4SS3CR3/AppData/Local/Temp/tmpn3rxlnty/extensions/[email protected]/components/command-processor.js:9039)
at fxdriver.preconditions.visible (file:///C:/Users/M4SS3CR3/AppData/Local/Temp/tmpn3rxlnty/extensions/[email protected]/components/command-processor.js:10090)
at DelayedCommand.prototype.checkPreconditions_ (file:///C:/Users/M4SS3CR3/AppData/Local/Temp/tmpn3rxlnty/extensions/[email protected]/components/command-processor.js:12644)
at DelayedCommand.prototype.executeInternal_/h (file:///C:/Users/M4SS3CR3/AppData/Local/Temp/tmpn3rxlnty/extensions/[email protected]/components/command-processor.js:12661)
at DelayedCommand.prototype.executeInternal_ (file:///C:/Users/M4SS3CR3/AppData/Local/Temp/tmpn3rxlnty/extensions/[email protected]/components/command-processor.js:12666)
at DelayedCommand.prototype.execute/< (file:///C:/Users/M4SS3CR3/AppData/Local/Temp/tmpn3rxlnty/extensions/[email protected]/components/command-processor.js:12608)
ご不便をおかけして申し訳ございません。
セレンはトリッキーです...言われているように、要素がページに見つからないため、クラッシュしているようです。ボタンをクリックした後にtime.sleep(3)を追加して十分なページを与えたい場合があります要素をリロードする時間... 1回の提出を行った後にページに実際にID voucherCodeが含まれていることを確認します。これをテストする簡単な理由は、クロムツールを使用して、ページの変更を手動で確認することです。html – reticentroot
@reticentroot私は、あなたが言ったことの両方を試しました。 time.sleep()は、同じエラーを再び助けません。私も提出後に要素をチェックし、それはまだ同じIDとすべてです。 –
i + 1の直後は、セレンがページ(driver.get())のページをリロードし、whileループ内でvoucher_box変数とredeem_button変数を移動させます。要素が毎回見つかるように。最終的には、try以外のtryループ内のすべてのものを、例外のパスまたは例外でブロックすることができます。 – reticentroot