サイト管理人Blog

cloudfreeで「さぁ始めましょう♪」

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

データベース作業はこれで完了。
残す作業はファイルのダウンロードです。
(つづく)

投稿へのコメントは コチラ(掲示板) へお願いします。

サイト管理人Blog