WordPressローカル環境を1Clickで更新(4/5)
2023-12-08 記載
概要 : Selenium WebDriverでSearch-Replace-DB-masterを操作してサイトURLを置換
関連記事:(1/5), (2/5), (3/5), (5/5)
Keyword : WordPress, Selenium WebDriver, VBA, Search-Replace-DB-master,
(前回のつづきより)
MariaDBにインポートしたデータは、サイト cfsid.cloudfree.jp で動作するデータになっていますので、サイトURLを localhostのApacheの設定にあわせて文字列置換する必要があります。
昔(?)なら、インポートする前にテキストエディタで一括置換かければよかったのですが、今はObjectをシリアライズさせた埋め込みデータが混じっているので、Stringデータを変更した場合はその文字数も変更しておかないと整合性がなくなります。
今になって気づいたのですが、シン・クラウドでのサイトURLと、ローカルApacheでのサイトURLの文字数をあわせておけば「テキストエディタで一括置換」技が使えるんですね。ローカルApache側はこれといって制約がないから、今からでも文字数合わせして楽ちんするのはできますけど、まぁこのあたり、ついでの学習課題の多いところですので、逃げずに正攻法ですすめることにします。
ADODBでMariaDBに接続して、自分で検索&置換しようとトライしてましたが、完成までもう少し時間がかかりそうなので、ここでは定番ツール「Search-Replace-DB-master」を使う方法を書いておきます。
前提として SearchReplaceDB が以下にセットアップされているとします。
htdocs\Search-Replace-DB-master/index.php
あとVBAにSelenium WebDriverのセットアップ。
そしてChromeとそのバージョンに応じたDriverのセットアップ。
処理の流れとしては
Step1. Search-Replace-DB-masterの最新バージョン利用チェック
Step2. 項目への値の設定
Step3. 接続テスト・置換のsubmit
htdocsのパス等は環境にあわせて読みかえてください。
'Selenium WebDriver
Dim sb As New Selenium.ChromeDriver '参照:Selenium Type Library
Dim By As New Selenium.By
sb.Start "chrome"
sb.Get "https://github.com/interconnectit/Search-Replace-DB"
Do Until sb.IsElementPresent(By.XPath("//h1[@tabindex=""-1""]"))
sb.Wait 300
Loop
'Gitの最新バージョン
Dim sVersionGit As String
sVersionGit = sb.FindElementByXPath("//h1[@tabindex=""-1""]").text
'利用バージョン
Dim sVersionUse As String
Dim adoFile As New ADODB.Stream
adoFile.Charset = "utf-8"
Call adoFile.Open
Call adoFile.LoadFromFile("C:\pgm\Apache24\htdocs\Search-Replace-DB-master\README.md")
GetFile = adoFile.ReadText
adoFile.Close
sVersionUse = Left(Mid(s, InStr(s, "# ") + Len("# ")), InStr(s, vbLf) - 1)
If sVersionGit <> sVersionUse Then
'Update必要
MsgBox "Update to " & sVersionGit
End If
Githubの最新バージョンと利用バージョンが違う場合、MsgBoxでその旨通知します。通知するだけで続行。
ローカルのSearch-Replace-DB画面を開いて、項目を入力。
TestConnectionを通して、DryRunはとばして、Replace実行。
アラートが出るのでOKしたら、そこから5秒のカウントダウン。
そして置換が終われば完了。
完了は、Stopボタンが消えるのをチェック。
sb.Get "https://localhost/Search-Replace-DB-master/index.php"
sb.Wait 300
'項目に値を設定
sb.FindElementByXPath("//input[@id=""search-0""]").SendKeys "cfsid.cloudfree.jp"
sb.FindElementByXPath("//input[@id=""replace-0""]").SendKeys "localhost/cloudfree"
sb.FindElementByXPath("//input[@id=""name""]").SendKeys "cfsid_mywordpress"
sb.FindElementByXPath("//input[@id=""user""]").SendKeys "cfsid_dbuser"
sb.FindElementByXPath("//input[@id=""pass""]").SendKeys "password"
'submit [Test connection]
sb.FindElementByXPath("//input[@name=""submit[update]""]").Click
Do Until sb.IsElementPresent(By.XPath("//div[@class=""successful-connection"" and @style=""""]"))
sb.Wait 300
Loop
'submit [Search And Replace]
sb.FindElementByXPath("//input[@name=""submit[liverun]""]").Click
sb.Wait 2000
'Accept OK
sb.SwitchToAlert.Accept
'(カウントダウン5秒)→Stopボタン表示→(処理中)→Stopボタン消える→(処理完了)
Do Until sb.IsElementPresent(By.XPath("//input[@name=""submit[stop]""]"))
sb.Wait 300
Loop
Do While sb.IsElementPresent(By.XPath("//input[@name=""submit[stop]""]"))
sb.Wait 300
Loop
'完了
sb.Close
データベース作業はこれで完了。
残す作業はファイルのダウンロードです。
(つづく)