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

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

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

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

5558閲覧

Python3.7 で win32com.client から取得した HTMLObject の getElement 系メソッドでエラーが発生する

退会済みユーザー

退会済みユーザー

総合スコア0

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2020/06/30 08:45

編集2020/06/30 12:55

下記プログラムの実行時に後述のエラーが発生します。
エラーの解消方法についてご教示をお願いいたします。

情報が不足しておりましたら、
どういった情報が必要であるかご指摘下さい。

言語: Python3.7
環境: Windows10 64bit / Visual Studio 2019

【ソースコード】
import time
import win32com.client

ie = win32com.client.Dispatch("InternetExplorer.Application")
ie.visible = True
ie.Navigate("https://www.google.co.jp")

while(ie.Busy and ie.ReadyState != 4):
time.sleep(1)

col = ie.document.all
elem = ie.Document.getElementById("gsr")

【エラー箇所】
elem = ie.Document.getElementById("gsr")

【エラー内容】
ハンドルされていない例外
Message=getElementById() takes 1 positional argument but 2 were given
Source=C:\Users\sample.py
スタック トレース:
File "C:\Users\sample.py", line 12, in <module>
elem = ie.Document.getElementById("gsr")

【試したこと】
1.エラー文面通り、引数を減らして(渡さずに)実行する。
結果、以下事象が発生しました。

 ①Visual Studio で「^ScriptDocument1 COMObject unknown.txt」というファイルが開く。
②開かれたファイルでエラーが発生する。

 【開かれたファイルの内容】
1行目 空白
2行目 LOAD_FAST(self), LOAD_METHOD(ApplyTypes), LOAD_CONST(3001611), LOAD_CONST(1), LOAD_CONST((12, 0)), LOAD_CONST(()), LOAD_CONST('getElementById'), LOAD_CONST(None), CALL_METHOD{6}, RETURN_VALUE
3行目 空白

 【エラー箇所】
開かれたファイルの2行目

 【エラー内容】
Message=(-2147352319, 'OLE error 0x80020101', None, None)
Source=<COMObject <unknown>>
スタック トレース:
File "<COMObject <unknown>>", line 2, in getElementById
File "C:\Users\sample.py", line 12, in <module>
elem = ie.Document.getElementById()

2.引数を2つ渡す。
予想通りでしたが、同じ箇所でほぼ同じエラーが発生します。
相違点は but 2 were given が but 3 were given となる点です。

3.引数で渡す id を変更する。
上記ソースコードに記載の gsr 以外の、 google.com に存在する id を渡して実行してみましたが、
同じ箇所で同じエラーが発生します。

ちなみに、エラー箇所直前の document.all が正常に取得できているので、
存在するエレメントの id 一覧は取得できます。

4.pywin32 のバージョンを確認する。
getElementsById の定義で引数に self を設定しなければ上記エラーが発生するはずなので、
import されているモジュール自体に問題がある可能性を考え、
現在のバージョンの確認と、 pip install pywin32 --upgrade を実行しました。

 結果、現在のバージョンは最新と思われる 228 であり、 --upgrade の後も228 のままでした。

5.getElementById を他のメソッドに変更する。
取り敢えず getElement と名の付くメソッドを思いつく限り実行しましたが、
すべて同様の箇所で同様のエラーが発生します。

色々なサイトを拝見しましたが、エラーの原因が特定できません。
どうかご助力をお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

stack overflowにそのものズバリの回答がありました。

getElementByIdはwin32comによって動的に作られるそうです(COMらしい動作ですね)。回避方法は「正常にに動作するウェブサイトに一旦接続し、その後正常に動作しないウェブサイトに接続する」事だそうです。

投稿2020/06/30 16:11

yymmt

総合スコア1615

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

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

退会済みユーザー

退会済みユーザー

2020/06/30 17:06

ご回答ありがとうございます。 ご提示頂いたサイトの質問内容は何度か拝見しておりましたが、 私が最初に確認したサイトでは1つ目の回答のみが表示されており、 その回答では解消策や原因については深く触れられていなかった為、 その後は同じ質問が掲載されていたサイトは読み飛ばしておりました。 大変失礼いたしました。 後程、改めてじっくりと拝見させて頂きます。 動的に作られるとのことで、エラー箇所の深追いが出来なかったのも納得がいきました。 一旦正常な document を渡せば良いらしいので、 ローカルで自作の html を渡す、などでも対応できるかもしれません。 また、document.body からなら実行できる?様な回答もあったので、 その辺りも含めて引き続き検証をしてまいります。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問