アウトプットして苦悩するスマートフォン用の表示で見るアウトプットして苦悩するこの広告は、90日以上更新していないブログに表示しています。自動化はじめに前回、Seleniumで職場のルーティンを自動化した記事を書いたしかし実行中にエラーが発生することが何度かあったので、その原因と解決作を記録する前回↓atc.hateblo.jp原因それはウィンドウの切り替えである。PDFの添付後、別ウィンドウがポップアップし、「OK」ボタンのクリックを要される。クリックをすると当該ウィンドウは自動で消える。これをSeleniumで動かしてみると以下の流れになる。3.ポップアップされたウィンドウが自動的に消えるので、元々開いていたウィンドウに切り換える上記操作をSeleniumで叶えるためには、windowhandleを知る必要がある。複数のウィンドウを操作したいとき、windowhandleを使うことでSeleniumの操作対象を切り替えることができる。2(最新より1つ前のウィンドウ)一番最初のウィンドウは0に、それ以降は新しく開いたウィンドウから割り振られていくwww.seleniumqref.com以上がwindowhandleの概要である。これを用いてポップアップに対してSeleniumを実行すると、体感的に30%程の確立で「OK」のクリックに失敗する。エラーコードを見てみると、「OK」のidが見つからなかったと書いてある。...原因を探してみたら次のとおりだった。driver.find_element_by_id(b1).send_keys(Keys.ENTER)当インスタンスを用いて出現するウィンドウは全部で3つである。idb1が見つからない場合、NoSuchElementExceptionエラーが発生するのでexceptで救出。上記であれば全windowhandleを捜索するので漏れはない。(なんか透けてる)1,2はすぐに終わるので良いとして、3はひたすらPDFを添付し続けるという苦行を30分間も強いられます。Aシステムは画面が遷移する度に「読み込み中」ポップアップが3秒程(長いときは5秒以上)表示されます。勉強してるPythonでseleniumを使って自動化してみました本記事ではその際に手こずった点をあげていこうと思いますSeleniumを使うには最低限のHTMLの知識を要するため、事前に簡単なHPを作成しておくのがよいと思いました。InternetExplorer11seleniumで操作するためにはドライバが必要。IEの場合IEDriverServerが必要となります。拡大率を100%にしてあげれば解決。普段のブラウザ操作では頻繁に拡大表示するので高確率でエラーがでちゃいます。要求されたURLからデータを取り出せませんでした。?ネットサーフィンをする時、コンピュータはブラウザからサーバへ情報の提供を申請し、サーバはその申請に応じてブラウザへ情報を送信しているプロキシはブラウザとサーバの間に存在する、中継役であるプロキシが存在することでブラウザは身元を隠すことが出来るメリットがあるインターネット接続を限定的に制限したい時などに設置される原因プロキシが設定されている場合localhost(127.0.0.)への接続にプロキシを経由することがある。プロキシに対してlocalhost(127.0.0.)でアクセスしようとするとプロキシ自体が通信を拒否してしまう。Python〜IEDriverServer間では通信にlocalhostや127.0.0.*が使われている。そのため、PythonからIEdriverServerにアクセスを行う際に、プロキシが接続を拒否してエラーになってしまう。解決法IE→インターネットオプション→接続→LANの設定→詳細設定→プロキシの例外、にlocalhostと127.0.0.*を追加するこれにより、localhostへの接続時にプロキシを経由しなくなるため、エラーは発生しない使用するドライバの指定(Ie)使用するドライバのPATHを引数に指定し、IEのWebDriverのインスタンスを作成します。webdriver.Ie(r"C:¥Users¥ユーザ名¥IEDriverServer.exe")PATHの書き方Windowsならではの問題ですが、windowsのPATHは¥マークで区切られます。#RでもOKウィンドウを切り換える(下記サイトは今回Seleniumを使う上で何度も参考にさせていただきました。)www.seleniumqref.comAシステムで業務を行っていると、新規ウィンドウが立ち上がります。ブラウズの設定のポップアップの発生時を常に新しいタブでポップアップを開くにしているので新規タブで表示されるのですが、Seleniumで操作するブラウザでは関係ないらしく、新規ウィンドウで表示されてしまいます。新規ウィンドウが自動的にSeleniumの操作対象になるのかと思いきや、ウィンドウの切り換え作業を行わないと新規ウィンドウの操作ができないようです。ウィンドウを識別する方法としてwindowhandleという情報を用い、それを元にウィンドウ切り換えを行います。#インデックス番号でwindowhandleを指定して切り換えちなみにdriver.current_window_handleとすると現在操作権のあるウィンドウのwindowhandleだけを取得できますflameの指定HTMLにはfleamという1つのページに複数のページを埋め込むことが出来るタグが存在します。fleamによって分割されているサイトでSeleniumを使いたい時は、欲しい要素がどこのfleamに存在するかをHTMLから判断し、fleam切り換えをする必要があります。ドキュメントファイルのアップロード通常ファイルをアップロードする時は参照をクリックするとエクスプローラが出現してファイルを選ぶ...といった流れになります。そのためSeleniumにもそのような機能が存在するのかと思っていました。毎朝のルーティンでは頻繁に画面を遷移します。遷移するたび読込時間が発生するので、コードの速さにブラウザが追いつかず、要素がありませんでしたと、エラーがでてしまう。そんなときに使えるのがSeleniumの待機です。Wait-待機しないと利用できない要素を見つける時に、指定した時間内ポーリング(条件を満たしたら処理を行わせること)させることができますつまり、指定した時間内で要素が見つかればすぐに次のコードを実行し、待っても要素が見つからなければエラーになる。読み込んでいる間は要素の取得が不可能なので、その間待ってくれます。一度設定してあげればWebDriverが起動中有効だそうです。seconds私は最初の頃time.sleep()で個別に待機させてました。ブラウザの読込が終了してもtime.sleep()に指定した時間はしっかり待機するので、テストコードを試すのに時間がかかってうんざりしていましたが、暗黙的な待機であれば要素が見つかれば即座に次のコードが実行されます。Wait-暗黙的な待機との違いは、個別の箇所に対してより詳細な条件で待機させることができる点です。今回は使わなかったので調べていません。動作が安定しなかったため、明示的な待機を使いました。visibility待機を多用しました。要素が表示されるまで待機する命令です。アクセシビリティはじめに今回職場のイントラの一部のページの作成を任され、始めてイチからHTMLとCSSを書きました。完成したイントラを職場内に公開する前に、総務省のHPにアクセシビリティに対応したWEBサイトを作るための支援ツールmiCheckerというものがありましたので、それを使用した時の備忘録です。(エムアイチェッカー)Ver.2.0アクセリビリティを考慮したWEBサイトの作成を支援するツールですDLして実行ファイルを起動したら、アドレスバーに作成したHTMLのURLを貼り付けて当該URLに移動。検証ボタンを押すことでアクセシビリティに反している部分を教えてくれます。8341-3とは幅広い人々が容易に情報を取得することができるように、アクセシビリティを考慮したコンテンツを作成することとした決め事。公的機関がHPを作成する際の決まり事だそうです。8341-3を遵守したWEBサイトの作成を支援するためのツールのようです。使ってみた今回職場で作成したHTMLで当該チェッカーを使ってみました。検証可能な対象は2つあります。今回どちらも指摘されていまいました。検証結果によると「ボタンのサイズが固定されている」「ボタンの背景色と文字色の彩度の差が少ない」とのことです。文字色は"#FFFFFF"で背景色は"#33CC99"でしたが、背景色を"#006633"にすることで解決しました。趣味であれば自分の好きなように作っておしまいなので、アクセシビリティを意識することは少ないと思います。"誰もが使い易いと感じるコンテンツ"を意識して作るのは難易度が高い。サービスをネット上に公開しようと思えば色々な人に使ってほしいのも事実。miChekcerを使えばアクセシビリティの知識がなくても、検証結果の問題箇所を改善するだけで、手軽に利便性を高めることができると感じました。行政のみならず一個人にとっても、コンテンツをより多くの人に使ってもらえるチャンスが増える便利なツールなのではと思います。periodテキスト化したXMLを変数aに入れ、パースします。notificationコマンドを入れてmacOSの通知センターに通知を出してますタイトルに今日の降水確率の文字列、サブタイトルに時間帯、メインに降水確率を出力しているのですが、いい具合に時間帯の下に降水確率が来るように調整していたら、コードがスカスカになってしまいました。Wikipediaデーモン(Deamon)と呼ばれるUnix系OSにおいてバックグラウンドで動作するプロセスのうち、コマンドを定期実行するもの。crontabというファイルに定期実行するものの一覧を記録している。ドキュメントos.systemはpythonに標準で入っているosモジュールで使える公式ドキュメントに沿ってosモジュールをお勉強しようと思ったのですが、わからない単語の嵐で全然理解できなかったので、今回はos.system()についてのみ調べます。