0

少し前進しました
★以降に追記しました
引き続きヒントを探してます
 
さらに前進しました
★★のクリア/入力/検証のスパルタフローで安定したっぽい
爆速
JavaScriptを排除したい
引き続きヒントを探してます
 
 
WebDriver制御のChromeで値の設定に苦戦しました
ひとまずJavaScriptで切り抜けました
あくまでも暫定対策です
JavaScriptよりラクでスマートな方法を恒久対策としたい
ノウハウ/アイデア/ヒント等あれば教えてください
 
 
エラーメッセージ

  • stale element reference

 
発生元のパーツ

  • 値の設定

 
要素の主な属性

  • input type="search" name="specialNo"

 
XPath

  • //input[@name="specialNo"]
    ※ nameで一意に定まる

 
要素の位置

  • 検索フォームの最も左上の欄

 
エラーの場面

  • リストの1件目を検索+処理後
  • 2件目のために検索画面に戻って特別番号を入力するとこ

 
バージョン情報

  • WinActor 7.2
  • Chrome 12x系
  • ChromeDriver 同(末尾の桁だけ差異あり)
    ※ ドライバ指定で利用

 
エラーを検索した先

  • UserForum
  • Google
  • ChatGPT

 
試したことと成否

  • × 値の設定
  • × 値の設定(入力再現)
  • × 指定時間待機:10秒
  • × 要素数取得:1
  • × 有効無効状態取得:true
  • × スパルタ式(できるまで反復)
  • × 属性値の設定:value
  • × ズーム:100%
  • × エミュレーション:Home
  • ◎ DevToolsのConsole:JavaScript
  • ◎ アドレスバー:JavaScript

 
効いたJavaScript

  • document.querySelector("input[name='specialNo']").value = '1234567890'
    ※ 10回中10回成功
    ※ 爆速

 
 
クリア後の所感

  • JavaScriptで何とかなるとは思ってた
  • もっとベーシックな方法で何とかしたかった
  • 何が正攻法なんだろう
  • 拡張機能制御なら「値の設定」ですんなりうまくいくはず
    拡張機能自体がJavaScript製だから
  • Ver.7.5シリーズならもっとスマートな攻略法もありそう

 
 
どうやら真相っぽい情報

Stale element reference - WebDriver | MDN
https://developer.mozilla.org/en-US/docs/Web/WebDriver/Errors/StaleElementReference

意訳

  • すべてのWeb要素はUUIDで管理されている
  • ページ遷移の際にUUIDが一旦破棄され失効する
  • WebDriverは古いUUIDのまま制御しようとする
  • ゆえにエラーになる
  • 「古い要素を参照してるよ」とたしなめられる

 
素朴なギモン

  • 特別番号の上書きを省けば、2周目も検索ボタンとかは「クリック」で制御できてる
  • inputのtypeがsearchだからこの症状が出る?
  • あるいは複数もあり得るname属性だけで制御しようとしたから?

 
 
振り返り(トラブルシュート中の気づき)

  • 2周目以降に特別番号が書き換わってない症状を経た
    エラーなく空振り
    変数「特別番号」は1周毎にリストを順送りできてるのに
  • 欄をクリアしてから入力で一旦はうまくいったかに見えた
  • クリアでも同症状が出るようになった
  • PCを再起動してたら、もしかしたらしばらくはこの症状が出ずにうまくいってたのかも

 
 
最新の実行結果

  • 実行者の1人から、1周目だけ検索ボタンのクリックに失敗すると報告あり
    わたしでは再現できず
  • ひとまずJavaScriptでクリックに差し替えた

 
検討中のテスト

  • 再起動
  • これだけを100回テスト
    検索でヒットしたアイテムを開く
    検索画面に戻る
    別の特別番号で検索

 
 

★ 2024/12/02追記
 
JavaScript界隈で類似の症状のノウハウを見つけました
最下部に引用しときます
概ね「要素が読み込まれてからアクセスすべし」な内容
WebDriverのリファレンスとも合致するし矛盾もない
 
Ver.7.4以降の「読み込み完了待ち」は拡張機能制御で有効という情報

https://winactor.com/questions/question/【wa0097】23_ブラウザ関連_04_待機_「読み込み完了待ち」/

 
スパルタ式は通用しなかった

読込完了待ちのバランスポイントを見出したい
https://winactor.com/?p=72614

待機もスパルタ式も通用しない
UUIDが再付与された後に要素にアクセスしたい
関係するDOMが固まってから
 
HTMLソースのほぼ終端に目印になりそうな要素を発見
div id="footer"
扱いやすい
 
現在地
検索画面に戻ったら
//div[@id="footer"] の要素数がゼロでなくなり次第
特別番号を入力
検索
 
検索ボタンからはJavaScriptを排除できた
特別番号はそれでもコケることがある
footer以降の読み込みも担保する必要があるのかも
≒ HTMLタグの読み込み完了待ち
ひとまず特別番号はJavaScriptに戻した
爆速で安定稼働中
でもやっぱりJavaScriptを排除したい
もう少し足掻きます
 
 
JavaScript界隈で類似の症状のノウハウ

Uncaught TypeError: Cannot read properties of null のエラー対処 #JavaScript - Qiita
https://qiita.com/ninjin831/items/de59dc9ba944eac2ff26

JavaScriptの「Uncaught TypeError: Cannot read property」エラーを解決する方法
https://kinsta.com/jp/knowledgebase/uncaught-typeerror-cannot-read-property/ 

Uncaught TypeError: Cannot (read set) property of nullの原因と対処法 | Webエンジニア Wiki
https://web-engineer-wiki.com/javascript/error-property-of-null/

Cannot set properties of undefined/nullエラーとは?原因と解決策を解説! - IT Information
https://it-infomation.com/javascript-cannot-set-properties-of-undefined-null/ 

Cannot read properties of nullの原因と対処法!JavaScriptエラー - キニナリアンテナ
http://kininariantenna.com/?p=7684

javascript エラー「Uncaught TypeError: Cannot read properties of null (reading ‘xxx’)」の解決方法 | mebee
https://mebee.info/2022/02/22/post-57683/

 
 
★ 2024/12/03追記
 
適用後にこう追加報告あり
なおも特別番号が上書きされないことがある(1つ前の特別番号で検索されることがある)
 
ChatGPTニキに相談
PythonでもSeleniumBasicでもJavaScriptでreturn document.readyStateがcompleteになるまで待機させられる
きっとVer.7.4以降の読み込み完了待ち相当
 
</body>の直前にユニークな要素を追加できれば、読み込み完了を検知しやすいのかも
要素を追加してみたことはあった

https://winactor.com/questions/question/htmlファイルでtitleタグが無い場合に操作の記録ができ/

 
ChatGPTニキに教わったJavaScript

document.body.insertAdjacentHTML('beforeend', '<div id="end">最後</div>');

Consoleから実行で、bodyの終端に「最後」が表示できた

  • 「最後」の要素挿入
  • 「最後」の要素が1になるまで待機
  • 特別番号の入力

時間稼ぎにはなるのかもしれない
シュール
10秒待ちが効かなかったから、症状の対策になる気はしない
念のため、もう1度待機も試してみよう
 
ひとまずクリアを入れる

document.querySelector("input[name='specialNo']").value = "";

  • クリア
  • 入力
  • 取得
  • 入力=取得

このスパルタ式で一時凌ぎ中★★
 
 
再度ChatGPTニキに相談

  • 値の設定
  • ウィンドウ状態待機:ID入力フィールドが操作可能になるまで待機
  • 値の設定

フェイント後に待ってから再入力なフロー
「ウィンドウ状態待機:特定の要素(この場合はアイテムや入力フィールド)が表示されるまで待つことで、DOMが完全に更新されることを保証します」とのこと
フェイントでエラーになることがあるからやっぱりスパルタ式になる
 
Ver.7.3以降なら「状態変化待機(要素)」がベストフィットっぽい

https://winactor.com/questions/question/【wa0115】ライブラリ「状態変化待機要素」の待機条/

 
Ver.7.2で同等の効果を得るには、、
このスパルタ式で行けるものなのかどうか

  • 要素数取得:0 ← この瞬間を経ることができるのかどうか
  • 要素数取得:1
  • 値の設定
  • ウィンドウ状態待機?
  • 有効無効状態取得:true
  • 値の設定

JavaScriptによるクリア後の入力確認スパルタ式の次に試す予定

pp 新しいコメントを投稿
回答とコメントは、会員登録(無料)で閲覧できるようになります。