Seleniumでブラウザを操作する
C#で Selenium を使ってブラウザを操作する上で便利なコードを書いておきます。
指定した URL を新しいタブで開く123456// 新しいタブを開いて選択する((IJavaScriptExecutor)driver).ExecuteScript("window.open();");var newTab = driver.WindowHandles.Last();driver.SwitchTo().Window(newTab);// 指定したURLに遷移するdriver.Navigate().GoToUrl("http://example.com");
タブを選択するdriver.WindowHandlesに全タブの実体が入っているので、取り出してチェックしていけば OK です。
12345678910// 開いているタブからURLが"http://example.com"のタブを選択するvar handles = driver.WindowHandles;foreach (var handle in handles ...
C#でSeleniumを使ってブラウザ自動操作をする
Selenium を使うと、ブラウザを自動で操作できます。使い方としては、① 要素を見つけて、② クリックなどの操作を行うことになります。
1. 要素を見つける要素を見つけるには、HTML の ID や Class 名、XPath を使うことができます。XPath を使うと柔軟に要素を探すことができます。
12// XPathを使う場合(Class名に"example"を含む要素)var element = driver.FindElement(By.XPath("//div[contains(@class, 'example')]"));
XPath はこのページが分かりやすかったです。
クローラ作成に必須!XPATH の記法まとめ
要素が表示されるまで時間がかかる場合は、それまで待つ必要があります。
123// 要素が表示されるまで、最大5秒待つnew WebDriverWait(driver, TimeSpan.FromSeconds(5)) .Until(ExpectedConditions.ElementTo ...
C#でSelenium(ブラウザを自動操作)を使うための準備
C#で Selenium を使ってブラウザ(Chrome)を自動で操作してみました。準備に必要な情報がちらばっていたので、まとめたいと思います。
Nuget からパッケージをインストール下記のパッケージをインストールします。
Selenium.WebDriver(必須)
Selenium.WebDriver.ChromeDriver(必須)
WebDriverManager(任意。Chrome 操作に必要な「ChromeDriver」最新版を自動取得)
一番下の「WebDriverManager」は任意ですがインストールした方が便利です。Selenium から Chrome を操作するためには対応したバージョンの「ドライバ」が必要です。Chrome は頻繁に更新されますが、「WebDriverManager」を使えばドライバを自動取得できます。
Selenium から Chrome を操作する12345678// ChromeDriver最新化new WebDriverManager.DriverManager().SetUpDriver(new ChromeConfig());/ ...
HttpRequestException:「Error while copying content to a stream.」の対策
C#で HttpClient を使って、とある API からデータを取得していたのですがSystem.Net.Http.HttpRequestException: Error while copying content to a stream.が発生してしまいました。根本的な解決はできなかったのですが、調査した内容や実際にやった対策を書きます。
発生したエラーPrism(WPF)で HttpClient を使って API を呼び出すところで、エラーが発生したりしなかったりする状況でした。(発生条件は不明)
.Net Framework 4.6.1
Visual Studio 2017
123456789101112// コード// 参照:https://dekirukigasuru.com/blog/2020/04/24/csharp-httpclientfactory/// Microsoft DependancyInjectionvar provider = new ServiceCollection().AddHttpClient().BuildServiceProvider ...
Dockerでfirebaseローカル実行ができなかった原因
Docker で構築した開発環境で、firebase のローカル実行ができなった原因を解決したので書いておきます。
TL;DR
Docker で firebase をローカル実行して、ホストから接続するには –host 0.0.0.0 が必要
12# hostオプションがないとホストのブラウザから閲覧不可$ firebase serve --host 0.0.0.0
firebase ローカル実行firabse はローカルで実行する機能があります。いちいちデプロイしてると時間がかかるので、ありがたいですね。
12# ローカルで実行$ firebase serve
ローカル実行したのにつながらない…開発環境は次の記事を参考にして、Docker で構築していました。
[Firebase] Cloud Functions で消耗したくない人のために、開発環境のベストプラクティスをまとめていったら Docker に行き着いた話(随時更新)
で、同じようにfirebase serveでローカル実行したのですが、ホストのブラウザからつながりませんでした。
firebase 起動時 ...
AtCoder Beginner Contest 162
AtCoder Beginner Contest 162に参加したので、学んだことを書いておきます。
問題と結果
問題名
結果
A
Lucky 7
WA:不正解
B
FizzBuzz Sum
AC:正解
C
Sum of gcd of Tuples (Easy)
TLE:実行時間制限超過
D
RGB Triplets
未提出
E
Sum of gcd of Tuples (Hard)
未提出
F
Select Half
未提出
A:Lucky 73 桁の数値に「7」が含まれているかをチェックする問題でした。解けたはずなんですが、最後のテストケースで失敗していて原因はよく分からなかったです。
B:FizzBuzz Sum有名な「FizzBuzz 問題」で、Fizz、Buzz、FizzBuzz いずれでも無い場合の和を求めるという問題でした。単純だったので、これは解けました。
C:Sum of gcd of Tuples (Easy)3 つの変数 a, b, c があります。それぞれを 1 から与えられた数字まで増やしていき、全パターンで 3 つの数字の ...
SQLServerの日付
TL;DR
スラッシュ(/)区切りで日付を設定するときは、シングルクオーテーション(’)で囲む
datetime 型に Insert しようとすると最近、Excel のデータを DB に投入する機会がありました。
単純に Insert 文を書いて入れようとしたのですが、データの種類として文字列や数値、そして日付が混ざっていたので「気をつけないと変に変換されそうだなー」と思っていました。
案の定、次のような SQL を書いて失敗しました。
12-- 日付を入れようとした失敗例INSERT INTO Table_1 VALUES (2020/1/1);
このクエリを実行してもエラーは出ません。でも、実際に設定される値は想定とは異なります。
1234-- 実際に設定される値Datetime---------------------------1905-07-14 00:00:00.000
原因は…想定した「2020/1/1」が設定されなかった原因は、シングルクオーテーション(’)で囲んでいないからですね。
12-- 意図した日付が入る例INSERT INTO Table_1 VAL ...
デブスト2019に行ってきた
デブスト(Developers Boost)2019(11/30開催)に行ってきました。次の2つの講演を聞いてきたので、内容と感想を書きたいと思います。
[A-5]打算的エンジニアの成長戦略~人より得意な部分で勝負する!~
[A-6]組織にモヤっとしたら聞く話
打算的エンジニアの成長戦略~人より得意な部分で勝負する!~
エムスリーキャリア 萩原氏
「打算的=利益を上げ、損失を下げる」に仕事をするために、得意なことで勝負されているそうです。そのために、次の3つのことを考えておられるとのことでした。
場所(業界):自分の得意に価値がある
得意を伸ばす:他人に追いつかれない
得意を増やす:得意の陳腐化を防ぐ
また、転職後にチームになじむためにされたことも、興味深かったです。
チームの価値観を知る:よく使われている言葉から
抱えている課題を把握する:活発なチャットから
上記から、自分の得意を知る
「自分の得意」な部分で勝負できれば、仕事もうまくいくだろうなと思いました。そのための戦略も理解できたので、伸ばしていきたいです。
組織にモヤっとしたら聞く話
IMAGICA Lab. 蜂 ...
Next.jsでBootstrapを使う
ReactのSSRフレームワーク”Next.js”で、Bootstrapを使う方法を書いておきます。
React BootstrapのインストールReact用のBootstrapとして、その名も “React Bootstrap“ がありますので、これを使います。
1npm install react-bootstrap bootstrap
CSSの読み込みReact BootstrapにCSSは入っていないので、別途CSSを適用する必要があります。今回は、通常のBootstrapのものを使うことにします。
Next.jsでCSSファイルを適用するために@zeit/next-cssをインストールします。
1npm install --save @zeit/next-css
次に、CSSファイルを使うためBootstrap自体もインストールします。
1npm install bootstrap --save
準備ができたので、設定ファイルを書き換えとCSSを読み込みます。
123456// next.config.jsconst withCSS = require('@z ...
1TBもあるHyper-V仮想マシンを圧縮した
Hyper-Vの仮想マシンを別のホストへ移行しようとしたのですが、サイズが問題となりました。移行先は800GBほどしか空いてないのに、仮想マシンは1TBもあったので縮小することにしました。
TL;DRHyper-Vの仮想マシンを圧縮するには、
仮想マシンをシャットダウンする
Mount-VHD "VHD/VHDXファイルのパス" -NoDriveLetter -Readonly
Optimize-VHD "VHD/VHDXファイルのパス" -Mode QuickまたはFull
Dismount-VHD "VHD/VHDXファイルのパス"
仮想マシンの圧縮仮想マシン全体のサイズの大部分を占めるのが、仮想ディスク(VHD/VHDX)です。これを圧縮するためには「最適化」を行えばOKです。
手順としては、まず、仮想マシンをシャットダウンします。(「停止」は電源を抜く行為に相当するためやめましょう)
次に、仮想ディスクに対してコマンドを実行して最適化を行います。この際、ディスクのパスを指定するため、マシンを右クリックし、設定から確 ...