4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

selenium用のよく使うコードをクラス化してみました!

Last updated at Posted at 2022-04-02

概要

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)
4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?