[解決済み] EC.presence_of_element_located((By.ID, "myDynamicElement")) は、IDではなくクラスを指定する以外にどのように使用するのでしょうか?
質問
Pythonを使って、HTMLを動的に読み込むウェブサイトをスクレイピングしようとしています。このウェブサイトには、HTMLに応答としてデータをレンダリングする埋め込みjavascriptファイルが使用されています。したがって、私がBeautifulSoupを単独で使用する場合、私のプログラムはJavascriptがデータをロードする前にそれをスクレイピングするので、私が必要とするデータを取得することはできません。そのため、seleniumライブラリをコードに組み込んで、ある要素が見つかるのを待ってからWebサイトをスクレイピングするようにしています。
もともとやっていたことです。
element = WebDriverWait(driver,100).until(EC.presence_of_element_located((By.ID, "tabla_evolucion")))
しかし、代わりに次のような方法でクラスを指定したい。
element = WebDriverWait(driver,100).until(EC.presence_of_element_located((By.class, "ng-binding ng-scope")))
以下は、私のコードの残りです。
driver_path = 'C:/webDrivers/chromedriver.exe'
driver = webdriver.Chrome(executable_path=driver_path)
driver.header_overrides = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'}
url = "myurlthatIamscraping.com"
response = driver.get(url)
html = driver.page_source
characters = len(html)
element = WebDriverWait(driver,100).until(EC.presence_of_element_located((By.class, "ng-binding ng-scope")))
print(html)
print(characters)
time.sleep(10)
driver.quit()
正しい構文がどこにも見当たりません。
どうすればいいですか?
関連するHTMLがあれば、より正規の回答を構築することができたはずです。しかし、最初の1行のコードから始める必要があります。
element = WebDriverWait(driver,100).until(EC.presence_of_element_located(
(By.ID, "tabla_evolucion")))
は、2行目のコードとほぼ同じ場所です。
element = WebDriverWait(driver,100).until(EC.presence_of_element_located(
(By.class, "ng-binding ng-scope")))
としてエラーを発生させます。
メッセージ:無効なセレクタです。複合クラス名は許可されていません
を介して複数のクラスを渡すことはできないので
By.class
.
に詳しい考察があります。 無効なセレクタです。Webdriver と Python で find_element_by_class_name を使用した複合クラス名の使用は許可されません。
解決方法
以下のように、いくつかの対処が必要です。
-
使用例が見えない状態で、機能的に
WebDriverWait
との関連で
EC
として
presence_of_element_located()
の中に要素があることを確認するだけです。 DOMツリー . おそらくこの先には、例えば次のような属性を取得する必要があります。value
,innerText
などと、その要素と対話することになります。ですから、代わりにpresence_of_element_located()
のどちらかを使用する必要があります。visibility_of_element_located()
またはelement_to_be_clickable()
に詳しい考察があります。 WebDriverWaitが期待通りに動作しない
-
最適な結果を得るためには
ID
とCLASS
属性があり、以下のいずれかを使用することができます。 ロケーターストラテジー : -
使用方法
CSS_SELECTOR
:
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located(
(By.CSS_SELECTOR, ".ng-binding.ng-scope#tabla_evolucion")))
-
使用方法
XPATH
:
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located(
(By.XPATH, "//*[@class='ng-binding ng-scope' and @id='tabla_evolucion']")))
関連
-
Pythonの非常に便利な2つのデコレーターを解説
-
opencvとpillowを用いた顔認証システム(デモあり)
-
pythonを使ったオフィス自動化コード例
-
Python Decorator 練習問題
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
PythonでECDSAを実装する方法 知っていますか?
-
[解決済み] リストを均等な大きさのチャンクに分割するにはどうしたらいいですか?
-
[解決済み] どうすれば、文字列中のリテラルな中抜き文字を印刷し、また.formatを使用することができるのでしょうか?
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] Pythonスクリプトのプロファイリングはどのように行うのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Python入門 openを使ったファイルの読み書きの方法
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac