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

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

ただいまの
回答率

90.51%

  • Python 3.x

    9841questions

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

  • selenium

    703questions

    Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

【Python】seleniumを使用した「teamspirit」打刻自動化システムでのエラー

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 256

yeezus

score 1

前提・実現したいこと

pythonのseleniumを使用し、起動するとChromeを起動、teamspiritにアクセスし、ログイン後、出勤打刻までを自動で行うプログラムを作成する。

発生している問題・エラーメッセージ

ログインまでは成功しているものの、その後、出勤ボタンのクリックに失敗している模様


Traceback (most recent call last):
File "autoAttendance.py", line 37, in <module>
click_attendance_btn()
File "autoAttendance.py", line 31, in click_attendance_btn
attendance = driver.find_element_by_css_selector("#btnStInput")
File "/Users/"ユーザー名"/.pyenv/versions/3.6.0/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 598, in find_element_by_css_selector
return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
File "/Users/"ユーザー名"/.pyenv/versions/3.6.0/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 978, in find_element
'value': value})['value']
File "/Users/"ユーザー名"/.pyenv/versions/3.6.0/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/Users/"ユーザー名"/.pyenv/versions/3.6.0/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"#btnStInput"}

該当のソースコード

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from datetime import datetime
import time

def browser_init():
  chrome_options = Options()
  prefs = {"profile.default_content_setting_values.notifications" : 2}
  chrome_options.add_experimental_option("prefs",prefs)
  chrome_options.add_argument("--allow-running-insecure-content")
  chrome_options.add_argument("--allow-insecure-websocket-from-https-origin")
  chrome_options.add_argument("allow-outdated-plugins")
  driver = webdriver.Chrome("/Users/"ユーザー名"/Downloads/chromedriver", chrome_options=chrome_options)
  return driver

def login():
  driver.get("https://login.salesforce.com")
  inputUserName = driver.find_element_by_css_selector("#username")
  inputPassWord = driver.find_element_by_css_selector("#password")
  loginBtn = driver.find_element_by_css_selector("#Login")
  inputUserName.send_keys("ID名を入れています")
  inputPassWord.send_keys("パスワードを入れています")
  loginBtn.click()

def click_attendance_btn():
  driver.implicitly_wait(10)
  attendance = driver.find_element_by_css_selector("#btnStInput")
  attendance.click()

driver = browser_init()
login()
time.sleep(5)
click_attendance_btn()

試したこと

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"#btnStInput"}

該当の部分が見つからないとエラーが出ているため、xpathでの記載に変えたり、読み込みの待ち時間を変更したりなどしてみたものの、こちらのエラーが消えず。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

  driver.implicitly_wait(10)
  attendance = driver.find_element_by_css_selector("#btnStInput")
  1. waitをもう少し大きくしてみては?

読み込みの待ち時間を変更したりなどしてみたものの

…変えたってことですかね?

  • 要素存在確認してから処理する命令が有った気が…します。waitを大きくする代わりにそれに置き換えては?
    Explicit Waitsの使い方
  1. attendanceにbody全部入れて、このコードが走るときのHTMLを確認してから悩んだほうが楽だと思います。
  • ajaxとかで動的に#btnStInputが作られている可能性あり。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/28 15:28

    ご回答いただきありがとうございます。

    1点ご質問なのですが、
    ”attendanceにbody全部入れて、このコードが走るときのHTMLを確認してから悩んだほうが楽だと思います”
    この部分、全然理解できず詳細に解説いただけないでしょうか。
    当方、python初心者でして…お手数ですが何卒よろしくお願いいたします。

    キャンセル

  • 2019/02/28 15:39

    大丈夫です。私Pythonは使った事ありません。

    html,cssの知識が有れば良いです。
    - css セレクター について調べてください。
    - bodyタグ配下(html タグ配下の方が良いかも)を取ってきて見てください。

    試してみてダメでしたらそのソースを見てください。

    キャンセル

  • 2019/03/01 17:11

    ご回答いただきありがとうございました。

    どうやらiframeで作成されており、その部分を参照していなかったことで、起動できなていなかったようです。現在では修正し、PC起動後に出勤を押せるシステムが作れました!!!!

    初めてpythonでプログラムを作成したため、至らないところが多く申し訳ありませんでした。ご協力いただきありがとうございました。

    キャンセル

同じタグがついた質問を見る

  • Python 3.x

    9841questions

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

  • selenium

    703questions

    Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。