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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

2回答

148閲覧

Google ColabでSeleniumを使用してwebページのテーブルに値を入力したい

karukin

総合スコア3

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

1クリップ

投稿2024/03/12 05:35

実現したいこと

GAS利用者で、初めてGoogle Colabを利用しています。
Seleniumを使用してwebページのテーブルに値を入力したいのですが、うまくいきません。
どのようにコードを記載すべきか、ご教授いただければ幸いです。

一般的に公開されているサイトではない為、サイトをお伝えする事は出来ず、該当する部分のHTMLを別途記載致します。
入力さえできれば、ActionChains以外の方法でも構いません。
(初心者のため、方法が複数ある場合は、できるだけスタンダードな方法だと助かります。)

質問内容が不足していましたら、ご指摘いただければと思います。
よろしくお願いいたします。

発生している問題・分からないこと

action.moveToElement(present).click().sendKeys(present, text_present).perform()
上記で、ホバー・入力欄をクリック・文字を入力しているつもりですが、エラーとなってしまいます。

XPATHの「"//table[@id='work_info2']/tbody/tr[7]/td[1]"」は、ログ出力して確認しているので、場所の指定内容は、あっているだろうと考えております。

以下は、入力先サイト側のソースの中で、「日付1」のテーブル「td」内の「--」のところに入力したいです。

エラーメッセージ

error

1AttributeError Traceback (most recent call last) 2<ipython-input-3-a2b4039b409d> in <cell line: 70>() 3 68 action = ActionChains(driver) 4 69 present = driver.find_element(By.XPATH, "//table[@id='work_info2']/tbody/tr[7]/td[1]") 5---> 70 action.moveToElement(present).click().sendKeys(present, text_present).perform() 6 71 7 72 #present[0].send_keys(text_present) 8 9AttributeError: 'ActionChains' object has no attribute 'moveToElement'

該当のソースコード

Python

1# ■■■Google Colabで実行しているソース■■■ 2import google_colab_selenium as gs 3from selenium.webdriver.common.action_chains import ActionChains 4from selenium.webdriver.chrome.options import Options 5from selenium.webdriver.common.by import By 6 7# 待機時間 8from time import sleep 9 10# カスタムオプションの作成 11custom_options = Options() 12custom_options.add_argument("--window-size=1920,1080") 13 14# カスタムオプションを使用してChromeドライバーを起動 15driver = gs.Chrome(options=custom_options) 16 17# URLを開く 18driver.get(URL) 19 20#ここで「send_keys()」で入力し、ログイン等しています。ソースは割愛します。 21 22# 待機時間 23sleep(2) 24 25# 問題の入力部分です 26action = ActionChains(driver) 27present = driver.find_element(By.XPATH, "//table[@id='work_info2']/tbody/tr[7]/td[1]") 28action.moveToElement(present).click().sendKeys(present, text_present).perform() 29 30 31 32

HTML

1<!-- ■■■入力先サイトの該当ソース■■■ --> 2 3<table table width="100%" cellspacing="0" cellpadding="8" class="wtable work_info" id="work_info2"> 4 <tbody> 567・テールブル上部は省略 8910<tr> 11 <th width="12%" align="left"> 12 日付1 13 </th> 14 <td width="15%"> 15 -- 16 </td> 17 <th align="left"> 18 日付2 19 </th> 20 <td colspan="3"> 21 -- 22 </td> 23 </tr> 24 </tbody> 25 </table>

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

「send_keys()」で入力する
→エラーになる
→web記事にて、テーブルには「send_keys()」で入力できないと判明
→web記事を参考にActionChainsを使う方法を試す
→現在に至る

補足

特になし

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2024/03/12 10:32 編集

HTMLで省略されているので確認ですが、 値の入力先はどのようになっているのでしょうか? フォームの INPUT タグ か何かでしょうか?
karukin

2024/03/12 11:23

ご確認いただき、ありがとうございます。 日付1の上の<tr>~</tr>の中には、以下のようにinputが入っています。 <p class="active" style="display:none;"> <input class="Wdate w01" id="dea" name="dea" onfocus="WdatePicker()" type="text" value="" /> </p> 今回入力したい日付1のHTMLは記載したコードが全部で、INPUTやtext、class等の記載がありません。 よろしくお願いいたします。
guest

回答2

0

こちらでもいけました。「send_keys」が原因だったようです。

action = ActionChains(driver)
xpath = "//table[@id='work_info2']/tbody/tr[7]/td[1]"
present = driver.find_element(By.XPATH, xpath)
action.click(present)
action.send_keys(text_present)
action.perform()

投稿2024/03/17 01:47

karukin

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

idのある直前の要素から、タブキーで移動するようにしました。
send_keys()も表記が違っていた為、修正しました。

action = ActionChains(driver)
aaaaa = driver.find_element(By.ID, "aaaaa")
action.click(aaaaa)
action.key_down(Keys.TAB)
action.send_keys(text_present)
action.perform()

投稿2024/03/16 23:10

karukin

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問