
chrome ver103.0.5060にver-upされたので、chromedriverもver-upしましたが、
以下の状態が発生するようになってしまいました。
以前のver102.0.5005までは問題なく動いていました。
<症状>
Excel VBAで、何度か以下を動作させると、ほんの時々「If elm2.Text = "次へ>" Then」で
ストップしてしまいます。Set elm1 =‥‥の前後でsleep 1000などを入れる少し良くなる気が
しますが同様に発生します。
「Set elm1 ("#displayArea > div.pager > ul")」や
「elm2.Click」でエラーやストップとなってしまうこともあります。
driver.IsElementPresent(myby.Css("#displayArea > div.pager > ul")でエレメント生成の事前チェックしてもあまり変わりません。
いろいろ調べましたが解決策がわかりません。なにか改善する方法がありますでしょうか?
-------code-------
'次へあるか
Set elm1 ("#displayArea > div.pager > ul")
For Each elm2 In elm1.FindElementsByTag("li")
Debug.Print elm2.Text
If elm2.Text = "次へ>" Then
elm2.Click
txt = get_htmlbody_text()
bl = bl + 1
GoTo nx_bl
End If
Next
No.3ベストアンサー
- 回答日時:
1.定数CSS_LARGE_IMAGEの定義について教えて下さい。
CSSセレクタですね。ご質問文で言えば "#displayArea > div.pager > ul"
定数の名前は適当に変えて下さい。
2.elm2.Wait~をもう少し具体的に書いていただくと有難いです。
処理対象の Web ページ構成に左右されるため、具体的な URL が分からない、HTML ソースが確認できない状況では難しいです。
何を待機しないといけないのか、または、待機以外に原因があるのか。想像しながら回答書くのは結構キツイです。
なので、適当に関係ありそうな幾つかのエッセンスを盛り込んだサンプル書いときます。
Googleニュースで検索をかけて、ページネーションの「次へ」を3回クリックさせてます。
Sub SampleProc()
Const TIMEOUT As Long = 150000
'/ 対象URLを定義----------------------------------------
Dim url As String
url = "https"
url = url & "://www.google.com/webhp?tbm=nws"
'/ -----------------------------------------------------
'/ 各種オブジェクトの用意
Dim Driver As Selenium.ChromeDriver: Set Driver = New Selenium.ChromeDriver
Dim Keys As Selenium.Keys: Set Keys = New Selenium.Keys
'/ Chrome 起動
Driver.Start
'/ 対象URLを開く(定数 TIMEOUT を超えるとエラーが発生)
Driver.Get url, TIMEOUT
'/ 入力ボックスに検索キーワードを送信して検索実行
Dim element As Selenium.WebElement
Set element = Driver.FindElementByCss("form > div:nth-child(1) > div.A8SBwf > div.RNNXgb > div > div.a4bIc > input", TIMEOUT)
element.SendKeys "教えてGoo"
element.SendKeys Keys.Enter
'/ ページが正常にロードされたか確認処理(略)
'/ ページネーションの「次へ」要素をループで3回探してクリック
Dim i As Long
For i = 1 To 3
'↓は動作を確認するために入れた長い Wait
Driver.wait 5000& '5秒
'/ IDやCSSで「次へ」要素を探す
Set element = Driver.FindElementByCss("#pnnext", TIMEOUT)
'/ Click で失敗する時は表示領域内までスクロールさせてみる
Driver.ExecuteScript "window.scrollTo(0, " & CStr(element.Location.y) & ");"
'/ ↓Chromeのスクロール待ち、数ミリ秒はあった方がいい
Driver.wait 300&
'/ 要素のクリック
'element.Click
'↑で失敗する様なら↓のようにJavaScriptでClickを試してみて
Driver.ExecuteScript "arguments[0].click();", element
Next
'/ オブジェクトの破棄(略)
End Sub
丁寧な解説ありがとうございました。
直ぐには理解できないので、これを参考に、時間をかけて理解して試行して行きたいと思います。
本当にありがとうございました。
No.2
- 回答日時:
こんばんは。
VBA(EXCEL)で良いのですよね?
最近神ページを見つけたのでご紹介しておきます。
【Selenium-VBA】Seleniumにおける待機処理をわかりやすく説明します。
https://powervbadesktop.com/web25/
この記事の紹介が直接回答で、以下は私の経験談から。
SeleniumBasic および ChromeDriver がインストールされかつ、
Selenium Type Library を参照設定している前提です。
先の回答で触れました件、Google イメージ検索では IMG タグの src 属性(画像URL)を動的に書き換えてます。
これをプログラムで次々と Click すると書き換えが間に合わなくなり、失敗してしまいました。
その時は次の様に対処しました。
・WaitAttribute を使って src 属性が URL に書き換わるのを待つ
<img src="data:image/jpeg;base64・・・
↓
<img src="https://・・・
実際コードはこんな感じ。
' / 画像の要素を取得する(動的にsrcを書き換えているので待機)
Set g_large_image = driver.FindElementByCss(CSS_LARGE_IMAGE).WaitAttribute("src", ".?://", TIMEOUT_MILISECOND)
※CSS_LARGE_IMAGE や TIMEOUT_MILISECOND は定数で宣言してます
まとめます。
何をもって待機とするかは Web ページの構造次第なので明確なサンプルは提示できません。
'/ タイムアウト(ミリ秒)最大15秒 長めに
Const TIMEOUT_MILISECONDS As Long = 15000
Dim driver As Selenium.ChromeDriver
Dim elm1 As Selenium.WebElements
Dim elm2 As Selenium.WebElement
'中略
Set elm1 = driver.FindElementsByCss("#displayArea > div.pager > ul")
For Each elm2 In elm1.FindElementsByTag("li")
elm2.Wait~(上記ページのいずれかを使って待機)
No.1
- 回答日時:
例えばsleep 8000などとし、待機時間を長く取った場合に安定するのであれば、ページロード、または動的に追加される要素の場合は Script の処理待ちの問題ですね。
少し前にGoogleのイメージ検索で画像収集するウェブスクレイピング処理をSeleniumで書きました。
スクロールで次々に要素が追加されるページでしが、その要素の存在確認をすると、処理完了前にTRUEが返ってしまい、それを目安にウェイトできなかったと記憶しています。
確か Until プロパティともう1つ何かを使って解決したような?
環境が今手元にないため、帰ったら確認してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript 配列の1要素を代入した変数を使って元の配列要素を削除できるか 1 2023/07/28 03:34
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- HTML・CSS HTML & CSS 縦ボックス内の文字の左右センタリング 3 2023/03/25 04:23
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pythonでのカーソル移動がずれる
-
cnt <= (others => '0'); の意...
-
正規表現
-
chromedriverのver-upで動作不...
-
htmlの文字が縦書きになる
-
htmlのolやulなどlistにtitleや...
-
画像イメージの上下左右、欲し...
-
ulタグやliタグの中でbrタグ...
-
下線と文字の間を調整するには...
-
個別にリンクの色を変える方法
-
余分な縦スクロールバーが出て...
-
smallにtext-allignが効かない
-
初歩的な質問です。<div>のwidt...
-
CSSがなぜかfont-sizeだけ効か...
-
複数行にまたがる括弧を表示し...
-
HTMLで一部だけスクロールする...
-
htmlの見出しタグ(<h1>)の次...
-
form input テキストを上下中央...
-
vb/vb.net XMLの大量データの作...
-
widthやheightの数値に単位(px...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
cnt <= (others => '0'); の意...
-
ASP.NETでプレーンなページに文...
-
pythonでのカーソル移動がずれる
-
Excel VBAでのIE操作でクリック...
-
検索結果がツリー状に表示され...
-
質問です。 新規登録ボタンが全...
-
VBAでの素数の求め方
-
safariで見るとページ上部に余...
-
css リンクの色が全部変わって...
-
秀丸で複数行コメントアウトを...
-
VBA : QueryTableでのスクレイ...
-
行頭から全角で3文字位さげた...
-
chromedriverのver-upで動作不...
-
プログラマーの方に質問です。 ...
-
電束密度と電場
-
Firefoxで別ページのアンカーリ...
-
携帯サイトの背景色
-
htmlの文字が縦書きになる
-
htmlのolやulなどlistにtitleや...
-
html/cssの、navを2段にする...
おすすめ情報
よろしくお願いします。期待して待ってます。
有難うございます。
なるほどと半分理解できましたが、次のことを再度お願いしてよろしいでしょうか。
1、定数CSS_LARGE_IMAGEの定義について教えて下さい。
2、「elm2.Wait~(上記ページのいずれかを使って待機)」では、
https://powervbadesktop.com/web25/を見ましたがうまく繋がらず理解できません。
(Set elm=Driver.FindElementById("Id名").WaitText("hello",2000) などどなっており、
.Wait~ではないので‥‥?)
elm2.Wait~をもう少し具体的に書いていただくと有難いです。