Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

python

動いてたseleniumのプロセスが「selenium.common.exceptions.WebDriverException: Message: Can not connect to the Service」いうて動かなくなったら……再起動するかchromeのプロセスを確認する

Raspberry Pi 4B上に組んでいたselemiumのテストをしていたところ、 途中から「selenium.common.exceptions.WebDriverException: Message: Can not connect to the Service」というエラーを吐いて動かなくなりました テスト中というのがミソで、正体はちゃん…

【読書メモ】スクレイピング・ハッキング・ラボ Pythonで自動化する未来型生活 (技術の泉シリーズ(NextPublishing))

スクレイピング・ハッキング・ラボ Pythonで自動化する未来型生活 (技術の泉シリーズ(NextPublishing))作者:齊藤 貴義発売日: 2020/09/04メディア: オンデマンド (ペーパーバック)

Ubuntu 20.10 on Raspberry Pi 4B にSeleniumの環境を構築してスクレイピング その2:ログインしてページ遷移

shuzo-kino.hateblo.jp の続き。 今度は、よくあるログインページを経由してトップページに遷移する方法について。 実際のところ 実行環境 Raspberry PI 4B 8Gbyte Ubuntu 20.10 python3.8 Chromium 88.0.4324.150 snap ChromeDriver 88.0.4324.150 スクリプ…

RaspberryPi 4B上に組んだSlenium環境にSSHで繋いだらリモートデバッグ扱いになるので適正なオプションをつける

RaspberryPi 4B上に組んだSlemium環境にSSHで繋いだところ、”DevToolsActivePort file doesn't exist”とエラーに。 調べてみたところ、SSH越しではChromeのリモートデバッグという扱いになるようで、Selemiumにも適正なオプションをつけないといけないらしい…

Ubuntu 20.10 on Raspberry Pi 4B にSeleniumの環境を構築してスクレイピング その1:環境構築とお試し

一日に一度、特定のサイトからファイルをダウンロードして別のサーバーにアップロードするという、実にクリエイティブな仕事が発生しました。しかも遠くにある機体の内部でやれと……。一瞬、そいつ用のラックトップPCに環境構築して送り付けようかと思いまし…

Python3.6から導入されたフォーマット済み文字列リテラル

sprintfみたいなノリで、フォーマットの差し込みができるリテラルが3.6からついた様子。 実際のところ 10進数を文字列として埋め込む value = 999 f"Value : {str(value)}\r\n" #>>>'Value : 999\r\n' print(f"Value : {str(value)}\r\n") #>> Value : 999 …

subprocessでホームディレクトリの省略記法'~'を使うときはshellオプションをTrueにする

Pythonでshellを使えるsubprocessは何かと便利ですが 実際のところ 単にホームディレクトリを見るだけの場合、チルダを使って楽したいところですが……素のsubprocessだとエラーになります。 subprocess.run(["ls", '~/']) #>> ls: cannot access '~/': No suc…

Pythonのdataclassでデータ構造のみを保存するクラスを用意

単にデータ(特に数値)を放り込む塊を作りたい場合、dataclassが使えます。 実際のところ from dataclasses import dataclass @dataclass class Point: x: int y: int = 10 pt = Point(x=10,y=19) pt.x #> 10 pt.y #> 19 初期値設定のおかげで pt3 = Point(…

【読書メモ】Pythonをおぼえた人がGUIアプリケーション開発をするためのtkinter速習入門: 標準ライブラリでGUI作成

Pythonをおぼえた人がGUIアプリケーション開発をするためのtkinter速習入門: 標準ライブラリでGUI作成作者:辛島信芳発売日: 2019/02/01メディア: Kindle版仕事上の必要でGUI作る羽目になり、手っ取り早いということでtkのpython移植版であるtkinterを使いま…

ルートユーザー状態で、他ユーザー扱いでコマンドを実行する

pipの依存パッケージの関係で、ルートユーザーでは入れてないけど特定ユーザーでは入ってるパッケージがあったとします。 実際のところ $ sudo /usr/bin/python3.7 Python 3.7.3 (default, Dec 20 2019, 18:57:59) [GCC 8.3.0] on linux Type "help", "copyr…

Boto3でAWSにアクセスする その2:S3にアップロードする

ではおまちかね、ファイルをぶっこんでいきます。 実際のところ 本当にぶん投げるだけなら、そのまんまメソッドよむだけ。便利。 import boto3 s3 = boto3.resource('s3') bucket = s3.Bucket('YOUR_BUCKET') bucket.upload_file('./image000.jpg', 'image00…

Boto3でAWSにアクセスする その1:接続情報の設定とS3の接続

AWSのPython用SDKとしてBoto3というのがあります。 こいつを使って、RasPiのファイルをS3にあげる動きを実装してみます。 実際のところ AWSのIAMアカウントを生成 AWSマネジメントコンソールから、IAM IAMコンソールのダッシュボード ユーザー 「既存のポリ…

PowerShellのPython3で文字列をおくりたいけど文字コードがcp932になっていて面倒なとき

最近は客先のWindowsで作業する事がおおくなりました。 PowerShellがソコソコ使えるので何とかなってますが、時折妙なクセがあったりしますね。 今回はそんな変なクセの一つ、Pythonの標準文字コードがなぜかSJISになってることと、その対処について。 実際…

RasPi 3B+ とOpenCVによる色範囲の抽出 その1:HSV色空間のフィルタツールをやってみる

Raspberry Pi 3B+ とWaveshare社OV5648USBカメラをつかって、 MaixBit + MaixPyでやっていた事を再現するという目標。 shuzo-kino.hateblo.jp 実際のところ 公式の閾値サンプルをもとに、一枚の画像の閾値を弄るサンプルとして改編。 import cv2 as cv max_v…

【地獄のバッドノウハウ】シリアル通信でコマンド送るタイプの装置が急制動するような場合、「tail -f」で監視し続けると動くことがある

shuzo-kino.hateblo.jp でやった事ですが、今日周辺で似たことがあったので。シリアル通信でコマンド送るタイプの装置……たとえばシリアルサーボなんかがあります。 それまでArduino IDEやminicomではちゃんと動いてくれたのに、 echoで単発のコマンド叩いた…

Python組み込みのprint関数には末尾の指定オプションがある

nt関数には末尾の指定オプションがあります。 実際のところ print関数の引数"end"に空文字を指定すると b="\x01\x02" print(b, end="") $ python3 sample.py | xxd -ps 0102 このendにはhex値を渡すこともok。 例えば、パケットの先頭としてよく使われる"0x7…

高機能なGPSモジュールZED F9Pをつかう その3:RasPiでつかうときはボーレートを自力で変更する

RaspberryPiで使用する場合、i2cのボーレートを上げないといけません qwiic.QwiicUbloxGps().address ============================================================================ NOTE: For and of the ublox gps units to work on the Raspberry Pi, I…

高機能なGPSモジュールZED F9Pをつかう その2:NMEAフォーマットを扱う

以前の記事でも紹介した通り、GPS信号はNMEAフォーマットというのできます。 これが最高に使いづらく、一々使い捨てパーサーを書くのもなんか負けた気がします。環境がPythonの場合は、パーサーライブラリがあります。 ユーザーが多い環境は便利だなぁ(白目…

高機能なGPSモジュールZED F9Pをつかう その1:Qwiicコネクタ

ZED F9Pはublock社の出している高機能なGPSモジュールです。 いわゆるフィールドロボティクスでも活用されてる github.com 参考もと www.sparkfun.com learn.sparkfun.com Qwiic HAT for Raspberry Pi Hookup Guide - learn.sparkfun.com www.sparkfun.com

【読書メモ】実践GAN ~敵対的生成ネットワークによる深層学習~

実践GAN ~敵対的生成ネットワークによる深層学習~ (Compass Booksシリーズ)作者:Jakub Langr,Vladimir Bok発売日: 2020/02/28メディア: 単行本(ソフトカバー)機械学習はまるで分野外だったのですが、勉強会でめっちゃ凄い本が紹介されたので衝動買い。お堅…

Sipeed Maix Bitで遊ぶ その4:特定の色を検知したときにフラグ

前回はカラーピッカーをやりました。 では、特定の色を検知した場合、何らかのフラグを立てるには……? 実際のところ import sensor, image, lcd, time lcd.init() sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) se…

Sipeed Maix Bitで遊ぶ その3:カラーピッカー

実際のところ import sensor, image, lcd, time sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.run(1) sensor.skip_frames(30) sensor.set_auto_gain(False) # must be turned off for color tracking sens…

Sipeed Maix Bitで遊ぶ その2:最初のアプリ(長方形の検出)

shuzo-kino.hateblo.jpの続きです。最初はWindowsでやろうかとも思いましたが……結局VirtualBox上のUbuntu18系に構築しました。 実際のところ 長方形を検出するアプリ さて、本題です。 大本のスクリプトではM1をベースにしてることもあって、SDカードをつか…

Sipeed Maix Bitで遊ぶ その1:導入

Sipeed Maix Bitは今を時めくRISC-VアーキテクチャK210を採用したマイコンボードです。 micro pythonの方言MaiPyが動くため……付属カメラをつかった画処理でC言語で血反吐を吐かずとも、結構な速度で特徴点や色判定くらいのサンプルなら動いてしまいます。 …

python3標準ライブラリのみで自分のIPアドレスをみたいなら、"8.8.8.8"に繋いで返り値を見る手がある

まさにその発想はなかった……という感じなのですが ベトナムや中国でネットを使ったことがある人にはお馴染みの"8.8.8.8"に接続し、 そこで返ってきたソケット名をもって自分のIPをしる方法があります。 import socket s = socket.socket(socket.AF_INET, soc…

Linux系ボードでi2cで通信しないならi2cdetectでアドレスを調べなおすのも手

それまで使っていたRasPi用I2CPythonスクリプトを違うデバイスで転用したところ IOError: [Errno 121] Remote I/O error などと怒られたのですが、全く検討がつかず。入れ替えこそしたものの、中の石も周辺回路もほぼ同じなのに一体なぜ……?あれこれ調べてい…

別のIPアドレス間でUDPパケットのやりとりを行う

実際のところ 受け手側ファイヤウォール まず、受信側のファイヤウォール設定を。 普段SSH用に22番しか開けてませんが、今回は1111をUDP用に開けてみます。 $ sudo ufw allow 1111 $ sudo ufw status Status: active To Action From -- ------ ---- 22 LIMIT…

unpackメソッドの結果を複数の変数にわけて格納する

pythonでは返り値を複数の変数に分離できます。 これはunpackにも適用されるので、バイト文字列を作ってそれぞれの変数に再度格納なんて愉快なこともできます。 実際のところ import struct valA,valB=struct.unpack('HH',b'\xad\xde\xef\xbe') print(valA) …

ctypeライブラリでC言語めいたメモリ領域の確保を行う

実際のところ from ctypes import * p = create_string_buffer(b"Hi", 10) # 10文字分確保し先頭にHiをいれる print( repr(p.raw) ) #>>> b'Hi\x00\x00\x00\x00\x00\x00\x00\x00' 参考もと docs.python.org

pack_into / unpack_fromメソッドをつかってC言語風にデータを格納する

structのpack_into/unpack_fromメソッドをつかうと、C言語のような感じでメモリ領域を確保、読み出しが可能です。 何らかの事情で保存領域の使用がタイトだったりとか、C言語で実装されたプロジェクトをPythonで書き換えたりするときに使えますね。 実際のと…