Delphiでフォームに張り付けたコンポーネントの色が変
2024.01.21
最近はガチのプログラム開発が無いので、
DelphiのCommunity Editionを使ってお茶を濁しているのですが、
Delphi11からフォームに張り付けたコンポーネントの色がおかしいことに気が付きました。
旧バージョンで動かすと問題ありません。
上の写真を見てもらえばわかると思いますが、
SpeedButtonにしてもちゃんと表示されていません。
はて、これは仕様なのか、バグなのか。
詳細はわかりませんが、設定で直ります。
ツールのオプションを開きます。
ウインドウが新たに表示されますが、その中のフォームデザイナで、
VCLスタイルを有効にするに入っているチェックを外します。
その後保存して終了
これで正常に表示されるようになりました。
DelphiのCommunity Editionを使ってお茶を濁しているのですが、
Delphi11からフォームに張り付けたコンポーネントの色がおかしいことに気が付きました。
旧バージョンで動かすと問題ありません。
上の写真を見てもらえばわかると思いますが、
SpeedButtonにしてもちゃんと表示されていません。
はて、これは仕様なのか、バグなのか。
詳細はわかりませんが、設定で直ります。
ツールのオプションを開きます。
ウインドウが新たに表示されますが、その中のフォームデザイナで、
VCLスタイルを有効にするに入っているチェックを外します。
その後保存して終了
これで正常に表示されるようになりました。
【Python】スクレイピングしたあとのデータ保存
2023.07.05
うまくいかないグチです(;´Д`)
年のせいか物覚えと理解力の低下が著しいです・・
スクレイピングといえば、Rubyか、Pythonが流行りと聞いて
どうせならとPythonでSeleniumとBeautiful Soupを試してます。
私の得意言語、Delphiで出来ればいいのだけどいいライブラリが無いのでね仕方ないね(;´Д`)
試してみて思ったこと・・・
Pythonでも1つで完璧にこなすのは無理なのね(;´Д`)
Seleniumはブラウザのバージョンと合致したドライバーを持っていないと使えない弱点があり、
動作も遅い。
しかし最近はJava Scriptを通さないと重要な部分は見せないページが増えてきたので、
Seleniumの機能が無いと始まらない(;´Д`)
Beautiful Soupは軽快且つ単独でHTMLを読みにいき
解析を行ったあとに対して検索を行うので
ドライバーがいらない快適性があるも、
Xpathに対応してないので、
裏技的にlxmlで変換してからなんて面倒なことをする・・
素人にはこれがストレス極まりない(;´Д`)
そして、SeleniumとBeautiful Soupどちらをうまく使っても
XPATHで拾えないデータが結構出てくる。
もちろんCSSセレクタ使ってもダメ・・・
これがまたストレス(;´Д`)
データを捨てるわけにもいかないので、
階層を一つ上げて全部を吸い上げ、コードでゴリゴリ分解とか
ホームページの仕様変更に耐性が弱すぎるので
信用に値しないものを作る意味は?と考え込む・・
そして拾ったデータを整理し2次元配列に仕舞い込んで
最後、CSV出力しようと思ったときにもうまくいかないで躓く・・・
慣れない言語をあつかうときの窮屈感たるや吐き気を催すレベル(;´Д`)
とりあえず、一般的なCSV吐き出しで使われる
csv.writer(出力ファイル)
と私は相性が悪いらしい・・・・
delimiterとquotecharを設定してもうまく機能しない・・・
空白が文字コード化されて保存されたり面倒くさい事件が多く起きる。
しかもカンマで区切ってほしいのにスペースでも区切ってしまう現象もおきて
文字列がコマ切れ状態に(;´Д`)
これについては解決策を見つけることができて、
煩わしいことをきれいに全部解決してくれたpandasに拍手。
import pandas as pd
columns = ["date", "serial", "name", "tanka", "kosu", "kingaku"]
df = pd.DataFrame(配列 , columns=columns)
df.to_csv('d:\output.csv' , index=False, encoding="shift_jis")
これだけで配列があっさりCSVファイルを出力できるのでコードもすっきり。
項目名がいらないのならさらに1行消せる。大満足(;´Д`)
しかしXPathもCSSセレクタでも拾えないデータはどうしようか・・・
ある意味これが対策されているってことなんだと思うけど、
正規表現でなら正確に抜け出せるのだろうか・・
1つ1つ解決していくのにえらい時間かかる。
まだまだ迷走中(;´Д`)
年のせいか物覚えと理解力の低下が著しいです・・
スクレイピングといえば、Rubyか、Pythonが流行りと聞いて
どうせならとPythonでSeleniumとBeautiful Soupを試してます。
私の得意言語、Delphiで出来ればいいのだけどいいライブラリが無いのでね仕方ないね(;´Д`)
試してみて思ったこと・・・
Pythonでも1つで完璧にこなすのは無理なのね(;´Д`)
Seleniumはブラウザのバージョンと合致したドライバーを持っていないと使えない弱点があり、
動作も遅い。
しかし最近はJava Scriptを通さないと重要な部分は見せないページが増えてきたので、
Seleniumの機能が無いと始まらない(;´Д`)
Beautiful Soupは軽快且つ単独でHTMLを読みにいき
解析を行ったあとに対して検索を行うので
ドライバーがいらない快適性があるも、
Xpathに対応してないので、
裏技的にlxmlで変換してからなんて面倒なことをする・・
素人にはこれがストレス極まりない(;´Д`)
そして、SeleniumとBeautiful Soupどちらをうまく使っても
XPATHで拾えないデータが結構出てくる。
もちろんCSSセレクタ使ってもダメ・・・
これがまたストレス(;´Д`)
データを捨てるわけにもいかないので、
階層を一つ上げて全部を吸い上げ、コードでゴリゴリ分解とか
ホームページの仕様変更に耐性が弱すぎるので
信用に値しないものを作る意味は?と考え込む・・
そして拾ったデータを整理し2次元配列に仕舞い込んで
最後、CSV出力しようと思ったときにもうまくいかないで躓く・・・
慣れない言語をあつかうときの窮屈感たるや吐き気を催すレベル(;´Д`)
とりあえず、一般的なCSV吐き出しで使われる
csv.writer(出力ファイル)
と私は相性が悪いらしい・・・・
delimiterとquotecharを設定してもうまく機能しない・・・
空白が文字コード化されて保存されたり面倒くさい事件が多く起きる。
しかもカンマで区切ってほしいのにスペースでも区切ってしまう現象もおきて
文字列がコマ切れ状態に(;´Д`)
これについては解決策を見つけることができて、
煩わしいことをきれいに全部解決してくれたpandasに拍手。
import pandas as pd
columns = ["date", "serial", "name", "tanka", "kosu", "kingaku"]
df = pd.DataFrame(配列 , columns=columns)
df.to_csv('d:\output.csv' , index=False, encoding="shift_jis")
これだけで配列があっさりCSVファイルを出力できるのでコードもすっきり。
項目名がいらないのならさらに1行消せる。大満足(;´Д`)
しかしXPathもCSSセレクタでも拾えないデータはどうしようか・・・
ある意味これが対策されているってことなんだと思うけど、
正規表現でなら正確に抜け出せるのだろうか・・
1つ1つ解決していくのにえらい時間かかる。
まだまだ迷走中(;´Д`)
【Python】 ドハマリselenium サンプルコードが動かない
2023.06.12
PythonとSelenium、Beautiful Soupの組み合わせでスクレイピングの勉強をしていますが、
ネットで転がっているサンプルコードでエラーがでる。
というかほとんどすべてがダメ(;´Д`)
どうやら最近登場したseleniumのバージョン4が問題らしい。
そりゃぁ、インストールするときはその時の最新バージョン入れちゃうよね。
まさか従来のソースが使えなくなるなんて考えてもみなかったよ(;´Д`)
driver.findElementByClassName("******");
driver.findElementByCssSelector(".******");
driver.findElementById("******");
driver.findElementByLinkText("******");
driver.findElementByName("******");
driver.findElementByPartialLinkText("******");
driver.findElementByTagName("******");
driver.findElementByXPath("******");
ここら辺の類が全部ダメ。もちろん複数形もダメ。
なんか表記方法の仕様変更らしい。勘弁してくれ(;´Д`)
driver.findElement(By.className("******"));
driver.findElement(By.cssSelector(".******"));
driver.findElement(By.id("******"));
driver.findElement(By.linkText("******"));
driver.findElement(By.name("******"));
driver.findElement(By.partialLinkText("******"));
driver.findElement(By.tagName("******"));
driver.findElement(By.xpath("******"));
こんな感じにそれぞれが変更になった。
私はカッコが複数絡み合うのは見にくいのだが・・・
あと操作系は
クリック element.click()
テキスト入力 element.send_keys("********")
キー入力 element.clear()
値のクリア element.submit()
テキスト取得 element.text
のように各エレメントに対して.で接続する。
うーーん、これから読み進める書籍がとてもめんどくさいことに(;´Д`)
ネットで転がっているサンプルコードでエラーがでる。
というかほとんどすべてがダメ(;´Д`)
どうやら最近登場したseleniumのバージョン4が問題らしい。
そりゃぁ、インストールするときはその時の最新バージョン入れちゃうよね。
まさか従来のソースが使えなくなるなんて考えてもみなかったよ(;´Д`)
driver.findElementByClassName("******");
driver.findElementByCssSelector(".******");
driver.findElementById("******");
driver.findElementByLinkText("******");
driver.findElementByName("******");
driver.findElementByPartialLinkText("******");
driver.findElementByTagName("******");
driver.findElementByXPath("******");
ここら辺の類が全部ダメ。もちろん複数形もダメ。
なんか表記方法の仕様変更らしい。勘弁してくれ(;´Д`)
driver.findElement(By.className("******"));
driver.findElement(By.cssSelector(".******"));
driver.findElement(By.id("******"));
driver.findElement(By.linkText("******"));
driver.findElement(By.name("******"));
driver.findElement(By.partialLinkText("******"));
driver.findElement(By.tagName("******"));
driver.findElement(By.xpath("******"));
こんな感じにそれぞれが変更になった。
私はカッコが複数絡み合うのは見にくいのだが・・・
あと操作系は
クリック element.click()
テキスト入力 element.send_keys("********")
キー入力 element.clear()
値のクリア element.submit()
テキスト取得 element.text
のように各エレメントに対して.で接続する。
うーーん、これから読み進める書籍がとてもめんどくさいことに(;´Д`)