サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
体力トレーニング
www.katsulog.tech
本エントリーは、Selenium/Appium Advent Calendar 2019 25日目エントリーです。 いい感じのチュートリアルがないので自分で作ります 近頃、自動化とかRPA系のイベントで登壇とかしているせいか、私への弟子入り志願者が増えています。 私としてはとても嬉しいですし、育ってくれたら仕事を手伝っていただきたいという気持ちですが、 プログラミングの学習サービスは数あれど、seleniumに関するオンライン学習となるとなかなか良いものがありません。 毎回1から教えていると時間がいくらあっても足りません。 そもそも業務効率化の事業をしているのに、全然効率的ではない。 ある程度体系化したものを自分で作って、最初はそのチュートリアルをやってみてもらうということにしました。 この記事は私のnoteでも公開します。 https://note.mu/katsuyads/n/nb83
本エントリーは、Selenium/Appium Advent Calendar 2018 2日目エントリーです。 rubyのコードを配布するなら環境構築が必要 rubyで書いたコードを実行してもらうならrubyのインストールやらgemのインストールやら、 seleniumであればchrome driverの設置やpathを通すなど、相手の環境で設定することが必須です。 この環境構築が結構めんどくさいので、手順を説明するってよりは遠隔で操作して設定してあげたりします。 windowsならruby + selenium webdriverも環境設定は15分で終わる exe化すれば環境構築が要らない!コマンドラインの操作も要らない!ダブルクリックでそのまま実行! windowsに限りますが、rbファイルをexe化してしまえば、コマンドラインの操作も要らずにダブルクリックだけで動作します。 今回は
開発エディタAtom → VS CODEを使ってみてる 2年くらいAtomを使っていましたが、めっちゃ重くなったり、固まって落ちるということが頻発していました。 また、コマンドラインをエディタ上で使うためのPlatformin IDE TerminalがAtomのバージョンをあげると使えなくなったりと、 バージョンアップ毎にパッケージの更新を待たなければならないなどの事情があって、手動でAtomのロールバックを行わなければならないとか、、、 結構困っていることがありました。 Visual Studio Codeがとにかく良いという噂を聞いた 日々読んでいるフィードの中でVS CODEがとにかくよいという記事を見ました。 ・とにかく軽い。落ちたことなんてない。 ・コマンドラインツールがデフォルトでついている ・日本語化もデフォルトでできる こんな内容だったんですね。 もし本当ならAtomから
headlessではないGUIでのコード まず通常モードでの実装です。 ダウンロード先のパスを指定するダイアログを表示しないようにして、 ダウンロード先のパスを指定します。 今回はコードと同ディレクトリの tmp フォルダを指定します。 prefs = { :download => { :prompt_for_download => false, :default_directory => File.absolute_path("./tmp") } } d = Selenium::WebDriver.for :chrome, prefs: prefs # この後にダウンロードリンクをクリックするコードを書く
Pythonで同じような記事がありました あずみ.net様はPythonでのSelenium記事が多数あるので、Pythonの方はオススメです。 【Python】Seleniumで別タブにページを 表示させる方法 | あずみ.net katsulogではRubyとJavaScriptで実装してみます あずみ.net様ではショートカットキーを利用して実装されていましたが、 当ブログではJavaScriptで新しいタブを開いてリンクを開いてみます。 もちろんrubyでもショートカットで開くという方法もありますが、敢えて別の方法でやってみましょう。 実装 では、ポイントを分けて説明していきます。 リンクを取得 要素からリンク先のURLを取得します。 require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome link
selenium webdriverで任意のchrome profileを作成し、ログイン情報などを記憶させる 2018年1月29日 driverを起動させる度にログインさせるのが面倒 selenium webdriverを使っていると、ログインが必要なサイトにアクセスする時に毎回ログイン情報を入力させてからサイトの中を動作させなければなりません。 複数のdriverを起動させる場合もdriver毎にログインしなければなりません。 ログイン機能のテストをしているのであれば良いのですが、できればログインを飛ばしてしまいたいと思うことはありませんか? 通常のChromeであればログイン情報が保存されているのでログインや2段階認証が飛ばせる いつも使っているChromeでは、ブラウザを立ち上げる度にgoogleのログインが求められますか?2段階認証を求められるでしょうか? そんなことはありません
エラーを捕捉してくれる例外処理(begin,rescue,retry) 自動テストなどでは、対象のアプリの不具合ではなく、コードやマシンなどのクライアント側のエラーが発生した場合のために例外処理を入れると運用がスムーズになります。 これ超便利。「なぜか時々ここでコケるんだよなぁ。。。」っていう場合にエラーを捕捉して、その処理をやり直してくれます。 こんな感じですね。
open-uriなどでcertificate verify failedと怒られる httpsのサイトにopen-uriなどで接続すると “certificate verify failed”というエラーが表示されてしまうことがあります。 「証明書検証に失敗しました」ってことですね。 seleniumやnokogiriで画像を保存しようとすると空のファイルが保存される selenium webdriverやnokogiriで画像を保存しようとすると以下のようになります。 require 'selenium-webdriver' require 'open-uri' driver = Selenium::WebDriver.for :chrome ###この辺にページでの処理### # 画像のURLを取得 url = driver.find_element(:id, 'gazo').find
csvファイルを作成すると文字化けする スクレイピングなんかをしているとデータをCSVに入れたくなりますよね。 でもそこにマルチバイト文字が混ざっているとエクセルで開いた時に文字化けしてしまったという経験があるのではないでしょうか。 bom付きで保存して解決 rubyに標準で入っているcsvライブラリのgenerateを使ってbom付きのCSVを作ってみましょう。 require 'csv' # bomを作成 bom = %w(EF BB BF).map { |e| e.hex.chr }.join # generateで引数にbomを渡してあげる csv_file = CSV.generate(bom) do |csv| csv << ["名前", "メールアドレス", "年齢"] end
headless driverについて headlessでseleniumを実行すると言えばつい最近まではPhantomJSでしたが、 PhantomJSにはバグが多く存在しているにも関わらず、開発は終了してしまいました。 headlessで実行できるということはGPUを使用せずに実行できるということになります。 通常のwebdriverでは実行するとブラウザが立ち上がって処理を行っていきますが、 headlessではブラウザが立ち上がることなく処理が行われます。 GPUを使用しないということはjenkinsなどで仮想のデスクトップ環境を用意する必要もなくなるわけです。 前述したようにheadlessの代表格だったPhantomJSの多くのバグを残したまま開発が終わってしまいました。 そこで登場した期待の新星がChromeのheadlessモードです。 Chromeのheadlessも登場
[GAS]GoogleSpreadSheetでのスクレイピング時にサイトにログインした後のソースを取得 2017年10月16日 スクレイピングの手法 rubyでのスクレイピング 本ブログではruby + selenium webdriverをメインで扱っていますが、 この技術を使ってよくスクレイピングしています。 私はrubyでのスクレイピングではseleniumかgemのnokogiriを使っています。 ruby + selenium webdriver(windows)のセットアップ方法は以下の記事で紹介しています。 windowsならruby + selenium webdriverも環境設定は15分で終わる | katsulog nokogiriでのスクレイピングではブラウザなどが立ち上がることなく、コマンドライン上のみで完結します。 Tutorials – Nokogiri 鋸
seleniumってよく聞くけど何? このブログではプログラミング言語のrubyと自動化ツールselenium webdriverをメインに扱っておりますが、 じゃあそもそもseleniumって何よ?何ができるのよ?なんでみんな使ってるのよ?という方がたくさんいると思います。 入門記事をググってみた 「selenium webdriverとは」でググってみたところ以下のような記事が上位に出てきました。 Selenium WebDriver入門 – Qiita Selenium WebDriverでWebアプリのテストが変わる(前編):iPhone/Android含むブラウザ自動テストの最終兵器Selenium WebDriverとは (1/2) – @IT 簡単・便利、ブラウザの自動操作!~Selenium WebDriver~ : アシアルブログ Selenium WebDriverのイ
複数のdriverを一気に立ち上げる 複数のdriverを宣言するのには普通に考えると以下のようになります。 driver1 = Selenium::WebDriver.for :chrome driver2 = Selenium::WebDriver.for :chrome driver3 = Selenium::WebDriver.for :chrome driver4 = Selenium::WebDriver.for :chrome driver5 = Selenium::WebDriver.for :chrome driver6 = Selenium::WebDriver.for :chrome driver7 = Selenium::WebDriver.for :chrome driver8 = Selenium::WebDriver.for :chrome driver9 =
とかで動きを途中で止めて変数の値を見たり、ブラウザで値が取れるか調べたり。 コード実装時間の半分くらいがデバッグの連続だと思います。 とにかく謎のエラーが多いseleniumです。 エラー処理を回避するbegin~rescue 何かしらエラーが起きた時にそのコードに対してbegin書いておくことで何かしらの処理を行えます。 エラーが起きた時に何かしらの処理を行ってくれるのがrescueですね。 例えば「何らかの処理」を行っている時にエラーが起きた場合に処理をリトライさせたいならrescueの後にretryを書きます。
本エントリーは、Selenium/Appium Advent Calendar 2017の12日目エントリーです。 chrome driverをextensionつきで起動 seleniumのchromedriverが起動するとChrome拡張無しで起動しますよね。 例えば広告をブロックする拡張やモノゾンなどのデータを表示してくれる拡張を有効にして実行したいシーンがあります。 今回はselenium webdriberをChrome拡張付きで起動する方法をご紹介します。 拡張からcrxファイルを作成する windowsとmacではcrxファイルが違うことに注意 windowsでwebdriverを起動する場合とmacで起動する場合でそれぞれcrxファイルが違います。 windowsの場合はwindowsのChormeを使ってcrxファイルを作成し、macの場合はmacで作成しましょう。 w
no such element: Unable to locate elementとかElement is not clickable at pointとかを回避するためのwait ruby + selenium webdriverを使っていれば誰もが見たことあるこれらのエラー。 動作が速すぎて要素が現れる前に処理が実行されてしまいこのエラーが出ちゃうことが多いですよね。 秒数を指定して動作を待つsleep このように書けば10秒待ってから次の処理を行うというコマンドです。 でも本当に10秒待てば次の要素は必ず現れるのでしょうか? ネットワークや実行する環境によっては1秒で現れてくれるかもしれないし、12秒待っても現れてくれないかもしれません。 前者の場合は1秒で現れてくれるのだから9秒無駄になってしまい、sleepを書く度にその無駄な時間が積み重なっていきます。 後者の場合はもちろんエラ
別にseleniumじゃなくてもrubyで使うcsvライブラリ rubyでCSVファイルを扱うための csvライブラリ 。 CSVファイルを読み込んだり、CSVファイルを出力したりといろいろできます。 別にseleniumを使うために用意されたライブラリでは決してないのですが、 私が携わったselenium webdriverでの案件では本当に多用してきました。 テストでの利用シーンでは、CSVでデータをダウンロードできる機能でファイルの中身が正しいかどうかの検証。 ブラウザ自動操作では、テストアカウントの読み込みや入力するデータをCSVファイルに記載して、それを読み込んでの実行。 スクレイピングでは取得したデータをCSVファイルで出力するという機能。 selenium webdriverを使っていて欠かせない技術がCSVファイルの扱いになります。 今回は私が使って来たcsvライブラリ(ク
idやclassが設定されていないページで多様するxpath selenium webdriverのコードを実装していく時にソースコードを見てidやclassが振られていれば良いのですが、 そんなにこちらの都合に合わせて作ってくれていないWEBページはよくあります。 そんな時にどうしても使わなければならないのがxpathです。 今回はそんなxpathで実装する際のtipsをいくつかご紹介したいと思います。 classにスペースが含まれるとエラーになる場合 classが複数振られている場合、ソース上はclass毎にスペース区切りで書かれています。
今まで当然のようにこのまま実装していました。 textareaへの入力速度が遅いというクレームが来た textareaとなると数千文字を入力する必要がある場合があると思います。 私の環境はwindow10+ruby2.3.3+chromedriverなのですが、send_keysでテキストを入力していくと、 高速ではあるのですが、1文字1文字入力していく形となり、同様の動作を1000件のように大量に行う必要があると、 大変な時間が掛かって来てしまいます。 私が開発依頼を請けたシステムも3000文字ほどの入力を1000件続けて行うような要件となっていました。 「selenium IDEでは一瞬で文字が貼り付けられたのにこれでは遅すぎる」というお叱りを受けることになったのです。 コピペ的なことで速度をあげたい textareaに一気に入力するのであればコピペっぽいことでいけるでしょうということ
このページを最初にブックマークしてみませんか?
『www.katsulog.tech』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く