実現したいこと
PythonとSeleniumを使用してスクレイピングを業務のために実装しようとしています。
そこで、自動で操作している最中に画像のようなダウンロードダイアログが表示されるのですが、保存ボタンを押下して、先に進みたいです。
発生している問題・分からないこと
スレッドを二つに分けて実行しているのですが、上手くいきません。
以下のコードはマウスを移動してクリックする操作を実装しようとしていますが、マウスは移動するもののクリックすることができません。
問題点やもっと確実な方法があれば教えて頂きたいです。
該当のソースコード
Main
1from selenium import webdriver 2from selenium.webdriver.common.keys import Keys 3from selenium.webdriver.common.by import By 4from selenium.webdriver.support.ui import WebDriverWait 5from selenium.webdriver.support import expected_conditions as EC 6import asyncio 7import time 8import input 9import buttonClick 10import pyautogui 11import nest_asyncio 12import threading 13 14def pushS(): 15 print("タイマー起動") 16 time.sleep(60) 17 pyautogui.click(814,551,button="right") 18 print("処理実行済み") 19 20def siteOperations(): 21 # WebDriverを作成(IE) 22 driver = webdriver.Ie() 23 # ウェブページを開く 24 driver.get("") 25 26 #ユーザー名の入力 27 input.inputID(driver,'NaviFrame',"UserName","") 28 # パスワードの入力 29 input.inputID(driver,'NaviFrame','PassWord',') 30 # ログインボタンをクリック 31 buttonClick.buttonClickID(driver,'NaviFrame','button1') 32 33 34 #契約データ抽出画面の表示 35 time.sleep(2) 36 driver.get("") 37 38 39 # [...]ボタンをクリック 40 buttonClick.buttonClickName(driver,'Rep5Main','select_code') 41 # [498]ボタンをクリック 42 buttonClick.buttonClickName(driver,'Rep5Sub','code386') 43 # [設定]ボタンをクリック 44 buttonClick.buttonClickName(driver,'Rep5Sub','set_btn_add') 45 46 #開始年の入力 47 input.inputName(driver,'Rep5Main',"start_year","2024") 48 #開始月の入力 49 input.inputName(driver,'Rep5Main',"start_month","1") 50 #終了年の入力 51 input.inputName(driver,'Rep5Main',"end_year","2024") 52 #終了月の入力 53 input.inputName(driver,'Rep5Main',"end_month","12") 54 55 # [出力]ボタンをクリック 56 driver.find_element(By.XPATH,"/html/body/center/form/input[1]").click() 57 58 59 60 # タブを閉じる 61 driver.close() 62 # WebDriverを終了する 63 driver.quit() 64 65if __name__ == "__main__": 66 67 #スレッドの作成 68 thread1 = threading.Thread(target=siteOperations) 69 thread2 = threading.Thread(target=pushS) 70 71 print("="*10,"スレッド1を開始","="*10) 72 thread1.start() 73 print("="*10,"スレッド2を開始","="*10) 74 thread2.start() 75 76 77 thread1.join() 78 thread2.join() 79 print("="*10,"スレッド終了","="*10)
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time def buttonClickID(driver,FrameName,ID): #フレームの移動 time.sleep(2) #親フレームに戻る driver.switch_to.parent_frame() driver.switch_to.frame(driver.find_element(By.NAME,FrameName)) # ボタンのクリック form_button = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID,ID)) ) form_button.click() def buttonClickName(driver,FrameName,Name): #フレームの移動 time.sleep(2) #親フレームに戻る driver.switch_to.parent_frame() driver.switch_to.frame(driver.find_element(By.NAME,FrameName)) # ボタンのクリック form_button = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.NAME,Name)) ) form_button.click() def buttonClickType(driver,FrameName,Type,content): #フレームの移動 time.sleep(2) #親フレームに戻る driver.switch_to.parent_frame() driver.switch_to.frame(driver.find_element(By.NAME,FrameName)) # ボタンのクリック form_button = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'input[type="' + Type + '"][value="' + content + '"]')) ) form_button.click()
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time from selenium.webdriver.common.keys import Keys def inputID(driver,FrameName,ID,content): #フレームの移動 time.sleep(2) #親フレームに戻る driver.switch_to.parent_frame() driver.switch_to.frame(driver.find_element(By.NAME,FrameName)) # 入力内容の入力 form_input = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID,ID)) ) form_input.send_keys(content) def inputName(driver,FrameName,Name,content): #フレームの移動 time.sleep(2) #親フレームに戻る driver.switch_to.parent_frame() driver.switch_to.frame(driver.find_element(By.NAME,FrameName)) #入力内容あればクリアにする driver.find_element(By.NAME,Name).send_keys( Keys.CONTROL + "a" ) driver.find_element(By.NAME,Name).send_keys( Keys.DELETE ) #element = driver.find_element(By.NAME, Name) #element.clear() time.sleep(2) # 入力内容の入力 form_input = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.NAME,Name)) ) form_input.send_keys(content)
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
キーボードから直接入力するようにしたのですが、効果がありませんでした。
補足
使用ツール
Python
Selenium
EdgeのIEモード
![guest](/img/icon/icnUserSample.jpg)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/05/23 09:08