Selenium(Edge/Chrome)

Edge/ChromeでJavaScript経由ラジオボタンの選択/解除【Selenium】【ExecuteScript】

VBAでEdge/Chromeを起動し、Webページ内のラジオボタンの選択・解除する方法です。
通常は要素を指定し、クリック処理を入れるだけです。

しかしながら、JavaScript経由で選択したい場合があります。

ラジオボタンを選択・解除するサンプルコード

当方の問い合わせページにラジオボタンがある為、そちらをサンプルとして記載します。

'■Edge/Chromeでラジオボタンを選択・解除する。
Public Sub sample()
    '■ブラウザを起動
    driver.Start "chrome" 'Edgeの場合はdriver.start "edge"
    driver.Get "https://vba-create.jp/contact/"
   
    '■ページ内ラジオボタンをJavaScriptで動作(True)
    driver.FindElementsByName("radio-type")(1).ExecuteScript "this.checked=true" 'メール希望がTrue
    driver.FindElementsByName("radio-type")(2).ExecuteScript "this.checked=true"  '電話希望  がTrue
    driver.FindElementsByName("radio-type")(3).ExecuteScript "this.checked=true"  '打合せ希望がTrue
 
    '■ページ内ラジオボタンをJavaScriptで動作(False)
    driver.FindElementsByName("radio-type")(1).ExecuteScript "this.checked=false"  'メール希望がTrue
    driver.FindElementsByName("radio-type")(2).ExecuteScript "this.checked=false"  '電話希望  がTrue
    driver.FindElementsByName("radio-type")(3).ExecuteScript "this.checked=false"  '打合せ希望がTrue
 
End Sub
'■HTMLサンプル(name="radio-type"があり、name要素が存在)
<span class="wpcf7-form-control wpcf7-radio">
	<span class="wpcf7-list-item first">
		<input type="radio" name="radio-type" value="メール希望" checked="checked">
			<span class="wpcf7-list-item-label">メール希望</span>
		</span>
	<span class="wpcf7-list-item">
		<input type="radio" name="radio-type" value="電話希望">
			<span class="wpcf7-list-item-label">電話希望</span>
		</span>
	<span class="wpcf7-list-item last">
		<input type="radio" name="radio-type" value="打合せ希望">
			<span class="wpcf7-list-item-label">打合せ希望</span>
		</span>
	</span>
</span>

Clickしたが反応がない場合がある

通常はラジオボタンやセレクトボックスはクリックするだけで、選択/非選択状態になります。
しかしながら、onclick等のJavaScript(JS)要素があるラジオボタンは反応しない場合があります。

上記のようにはExecuteScriptで、JavaScriptを動作させることで反応を強制的にさせます。

SeleniumBasicについて

Internet Explorer11 のサポート期限が2022年6月までと、スクレイピング自体入れ替えていく必要があります。
今一番スムーズなのはSeleniumBasicを使用したスクレイピングと考えます。

但し、VBAでのネット記事は少なく困っている方も多いと思います。
弊社で代行開発も可能ですので、お気軽にご用命ください。

コメント

タイトルとURLをコピーしました