概要
seleniumをでよく使うコードをモジュール化して制御させました。
ネットに落ちている情報を参考にしながら作ったので、冗長な記述になっていると思いますが、動作確認はできております! 現状最低限動かせるメソッドしか用意できていませんが、実用性を重視してXpathだけでなくCSSセレクタからの要素の取得も行えるよう改良していきます。
ソース
クラス
from pickle import NONE
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import WebDriverException
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
class SeleniumOperationBase:
def __init__(self, *, headless=True):
self.log=NONE
options = Options()
options.add_argument('--window-size=1024,768')
options.add_argument('--no-sandbox')
options.add_argument('--disable-setuid-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--headless') if headless else None
self.driver = webdriver.Chrome(ChromeDriverManager().install(),options=options)
self.wait = WebDriverWait(self.driver, 30)
self.driver.set_page_load_timeout(15)
self.driver.implicitly_wait(15)
self.driver.set_script_timeout(15)
#指定したURLにアクセス
def driver_get(self, url):
self.driver.get(url)
#指定した要素が表示されるまで待機する
def wait_WebElement_Visibility(self,webElement):
try:
self.wait.until(EC.visibility_of_element_located((By.XPATH,webElement)))
except SystemError:
self.log.error('要素待機失敗:'+webElement)
raise
#指定した要素を返すelementsの状態で返す
def get_WebElements(self,webElement):
try:
elements = self.wait.until(EC.visibility_of_all_elements_located((By.XPATH, webElement)))
except:
self.log.error('要素待機失敗:'+webElement)
raise
return elements
#画面要素をクリックする(WebElement形式)
def webElement_Click(self,webElement):
try:
webElement.click()
except SystemError:
self.log.error('画面要素押下失敗')
raise
#テキストを送る(WebElement形式)
def sendText(self,webElement,sendTexts):
try:
webElement.clear()
webElement.send_keys(sendTexts)
except SystemError:
self.log.error('テキスト送信失敗:'+sendTexts)
raise
使用例です;;
class ExampleCrawler(SeleniumOperationBase):
def __init__(self,):
super().__init__(**args)
crawler = ExampleCrawler(headless=False)