Pythonのお勉強 Part73

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ f610-G7il)
垢版 |
2024/06/06(木) 08:48:10.07ID:DsazphEm0
!extend:default:vvvvv:1000:1024
!extend:default:vvvvv:1000:1024
↑スレ立てる毎に減るので、減ってたら3つに補充すること。

・当スレにRubyのソースコード類を書くことを禁ず
・Ruby等、Pythonではないプログラミング言語での回答類・質問を書くのも禁止
・「Ruby では」「Rubyでは」「Rails」正規表現→「^クソチョンw$」をNGワード登録推奨
・エラーを解決したいときは、かならず
エラー文(勝手に省略orスクショうp等の横着禁止)と
おま環(Pythonのバージョン番号+OS名とバージョン+IDE名)を書け。

※前スレ
Pythonのお勉強 Part72
https://mevius.5ch.net/test/read.cgi/tech/1703659345/
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
2024/08/31(土) 18:14:58.61ID:fwQH707u0
>>785
ありがとう!固定要素数じゃない場合の例が思案に明け暮れていたとこで、助かります!
丁度さっき、そうだ受け取ったstrに応じる形で"関数側のcase match文"で
決められた格納場所に同じく受け取ったvalueを書き込もう、としていました
コマンドウィンドウを開いているか否か0or1みたいなものを
StatsクラスのStats.write("commandopen", 1)、これの第一引数をcaseでふるいにかけ書き込むべきインデックスに辿り着く感じ…(>_<)
2024/08/31(土) 18:51:32.93ID:mruaKbs00
{“commandopen”: 1}がkey/valueなら
素直にdictionaryで状態管理したほうがいいんじゃないかな
case文やインデックス変換なくせるよ
2024/08/31(土) 18:59:52.21ID:fwQH707u0
たしかに…辞書やjsonといった物の扱いに恐怖心があって無意識に避けてたかも
2024/09/01(日) 08:53:52.90ID:5+RJ54+E0
前回と今回のid一覧があって、
今回追加分のidに該当するものがなければ終了
みたいな処理をどう書こうか考えてて、
結局setの演算にしたら1行になった
setむっさ使える
2024/09/02(月) 14:46:18.35ID:V2ztMrfU0
テキストをフィルターしていて、
特定の行があったら、その前後の行も削除して出力したい

後ろも削除はiterでnext()すれば飛ばせるけど、
すでに出力しちゃったものを無かったことにするのが難しい
一旦全部バッファに溜めておくしか無いのかな
2024/09/02(月) 16:47:53.26ID:ciLmvDW/0
全部じゃなく
1行バッファして次が来たら出力する部品でいいんでは?
もちろんバッファ削除とフラッシュの機能もつける
2024/09/02(月) 17:05:31.51ID:V2ztMrfU0
削除する必要が最大1行ならいいけど、実際には2行のケースもある
2024/09/02(月) 17:13:39.22ID:ciLmvDW/0
理解力というか応用力低すぎて草
2024/09/02(月) 17:30:55.08ID:V2ztMrfU0
んー、そんな小手先で回避してたらすぐ行き詰まるよ
2024/09/02(月) 17:52:44.67ID:DywOJmSg0
1回目は削除インデックスを確保するだけで2回目のフィルタリングでそのインデックスを削除する
何行削除でも可能
2024/09/02(月) 18:08:44.35ID:V2ztMrfU0
なるほど2パスにするのか
入力はファイルなのでそれで十分だし高速だしメモリも食わない
ストリームにまで対応可能な方法は多分ない
797デフォルトの名無しさん (ワッチョイ 072a-DKuy)
垢版 |
2024/09/02(月) 18:18:02.18ID:cZu9PahF0
>>790
俺にはこの話題の sed コマンドは全く理解できないが、解るなら python に移植してみてはどうだ。
https://mevius.5ch.net/test/read.cgi/unix/1085730992/593-
2024/09/02(月) 18:18:35.06ID:0P3ClJWr0
dpでやるやつじゃね?
2024/09/02(月) 18:24:28.25ID:V2ztMrfU0
sed的にやろうとすると、ファイル全体を読み込んで検索して、というやり方と同じなので、
メモリはファイルサイズだけ食うことになる
sedはそれをストリームに対してやるのでメモリ食わない

メモリ節約するなら最低限だけ読みながら、という処理になるけど、
最低限が何行なのかは条件次第なので条件の解析までやらないといけなくて、
ツブシの効かないコードを頑張って書くことになる
2024/09/02(月) 18:39:20.59ID:ciLmvDW/0
主に最適化の理由で出力のバッファリングはPython内外で透過的に行われてるし
そこに出力遅延するio.Writer追加するだけの話
バッファはいくらでも動的に確保したらいい
小手先らしいけどそれで必要十分
2024/09/02(月) 18:49:11.43ID:R3lh7LPd0
本人がバッファリングが必要な範囲を抽象化して捉えられてないから1行とか2行とかって説明になるんだろ

最近出現頻度の高い末尾54さんはいつもこのパターン
2024/09/02(月) 18:53:10.49ID:V2ztMrfU0
前後の行としか書いてないけどな
前後n行だよ

バッファリングするのはいいとして、フラッシュのタイミングが不明だとどうしようもない
前後n行に絶対引っかからない行が定義できない
2024/09/02(月) 18:56:45.68ID:DywOJmSg0
前の全部の行が削除対象になり得ることを考えるとストリームにやるなら全部バッファに溜めるしかなさそうだ
804デフォルトの名無しさん (ワッチョイ ff7c-rxv+)
垢版 |
2024/09/03(火) 15:35:20.10ID:GbfXXZxt0
>>0790

https://ideone.com/R9UweU

前後N行消したいなら、前のN行をバッファできれば充分。1パスでいけるよ
2024/09/03(火) 21:07:40.33ID:l2RoLSBv0
N行が全行−1行になることもあるから1パスだとメモリ食ってヤダって話みたいよ

そもそもの問題認識が間違ってるよね
2024/09/03(火) 21:28:25.04ID:b8qS9knc0
今やメモリなんて膨大にあるから、1億行でも平気
そんなこと気にしないのが簡単でかつ現実的
一応気にして2パスにするのも、比較的簡単
中途半端に気にして対応すると手間がかかる上に不完全になる
807デフォルトの名無しさん (ワッチョイ 5f5c-1cCN)
垢版 |
2024/09/03(火) 22:33:39.88ID:2uJG6i7Z0
じゃあ何を悩んでたの?
よく分かんねーけど能書きの前に常識として謝辞のひとことくらい述べたらどうかね
2024/09/03(火) 22:36:18.67ID:b8qS9knc0
なんか知らんけど、勉強する気のない奴が紛れ込んでるんだよな
809デフォルトの名無しさん (ワッチョイ e768-3eZc)
垢版 |
2024/09/04(水) 10:07:28.75ID:1egc59UO0
slenium使ってWebページの巡回してますが、CSSセレクターやxpathが日によって変動する場合の対処法をご教授願えれば幸いに存じ上げマッスルマッスル。
2024/09/04(水) 13:21:36.89ID:8f/9E+Y70
フルで指定しなくても部分でもいけるので、変わらない部分を使う
2024/09/04(水) 16:46:15.23ID:8f/9E+Y70
またストリームっぽい話
デリミタ行があって、それで区切った単位で処理する
デリミタを見つけたら処理、みたいにすると、デリミタ無しで終了した場合に最後が抜ける

元データの方で最後にもデリミタを入れる
ループを抜けた後に同じ処理を追加する
デリミタ or EOF みたいな判定にする
等の対応があって、EOFがスマートそう

でもEOFの検出が大変
ファイルを1行ずつ読んでても次を読んでみないと判らないし、
iterでも例外を起こすとか、リストが対象だったらコピーしといてpopしていって空か見るとか

最後まで行ったら自動で終わる処理はとても書きやすいのに、
最後の処理の最中に最後だと判定するのが困難
2024/09/04(水) 16:53:37.40ID:mtP1OC380
日本語を見ればプログラミング適性がないのがよくわかる
2024/09/04(水) 17:15:00.32ID:u5L50CbY0
デリミタ行以外で終端になったら
追加でデリミタ行を返すイテレータを書くだけ
2024/09/04(水) 17:24:08.15ID:8f/9E+Y70
データ数nでデリミタ数n-1、という気持ち悪い状態が自然によくあるんだよな
joinで結合して、splitで分解するのと同様に、
デリミタで分解する処理を最初に入れるのが多分正解
最後のデリミタがあってもなくてもいいようにしないといけない
2024/09/04(水) 17:28:38.80ID:8f/9E+Y70
分解する処理が全く同じ問題にぶつかるんですが
816デフォルトの名無しさん (ワッチョイ 87a9-vKF2)
垢版 |
2024/09/04(水) 17:30:47.74ID:6BJD9ak60
>>810
ありがつお!フルで指定しないとエラーでます。
ifとか使ってあがいてみマッスルマッスル!
2024/09/04(水) 17:33:35.02ID:8f/9E+Y70
perlだったら、f = open(file) みたいなので取得したファイルオブジェクトに対して
eof(f) を見たら終端に達してるかどうかが判る
pythonでもf.eof() みたいなのを作っといてくれればいいのに無いというのは、
そんなプログラムは書くなという明示的な意図なんだろうな

便利なのになー
なんで駄目なんだろ
2024/09/04(水) 17:54:41.94ID:8f/9E+Y70
仕方ないからsplitのlist版を汎用で書いて、自分用ライブラリに入れとこう
これも意地悪で存在しないのか?
2024/09/04(水) 18:09:05.10ID:u5L50CbY0
more_itertools.split_ナントカ
820デフォルトの名無しさん (ワッチョイ ff7c-rxv+)
垢版 |
2024/09/04(水) 19:07:28.42ID:8eJhy0Tz0
>>0811

1行単位で読みつつ複数行単位で処理したいループのあるあるだね

Pythonならイテレータやジェネレータを使うかも
https://ideone.com/qSuDAt

なるほどジェネレータの処理が“全く同じ問題にぶつか”ってて、
この例ではそこを「ループを抜けた後に同じ処理を追加する」でやってることになるかな

まあでも、泥臭いことをここに押し付けて、メインのループがブロック単位でまわせるのがよい
だいたい、ふだん行単位でまわせるのもライブラリが泥臭いことしてるおかげだし
2024/09/04(水) 19:46:26.52ID:8f/9E+Y70
https://i.imgur.com/wMdI3xj.png
真似っこ
buf.clear() まで真似したら見事にバグる
822デフォルトの名無しさん (スプッッ Sdff-UdSI)
垢版 |
2024/09/04(水) 20:41:57.33ID:gNKcgXFOd
こういうバカに産まれなくてホントに良かったよ
CSVなんかでも最後にカンマあるとかねーとかでうんうん言うんかな
2024/09/04(水) 20:59:08.55ID:8f/9E+Y70
セパレータで区切って1行になってたら最後にはセパレータがあってほしくない
文字列を改行で区切って並べるなら、最後にも改行があって欲しい

等価なことをやってる筈なのに、区切りが改行の時だけ例外なんだよな
'\n'.join(l) + '\n'
みたいなことをやる羽目になって、それが正しいんだけど不便
2024/09/05(木) 00:04:43.15ID:J+Hr7uF60
汚れ仕事になると分かってるなら
そこだけ分離するな
825デフォルトの名無しさん (アウアウエー Sa1f-XN8b)
垢版 |
2024/09/05(木) 00:12:14.06ID:/oUqYYg3a
>>811
readerにfinalizeを用意させれば良い
826デフォルトの名無しさん (アウアウエー Sa1f-XN8b)
垢版 |
2024/09/05(木) 00:14:42.60ID:/oUqYYg3a
>>822
range(start, end) で end - 1 までになるのが納得いかないとか言い出しそうだよね
2024/09/05(木) 12:37:32.12ID:yOHjemdL0
これが汚れ仕事になってしまうのは、プログラム的な正しさと人間の正しさの感覚の齟齬があるんだろうな

pascalで行末にセミコロンを付ける
でもこれはセパレータなので、最後の行にも付けるとエラーにされる
ふざけんなということで、Cではセパレータではなく行末記号になった
今度は最後にも付けないとエラー

a = [
 aaa,
 bbb,
 ccc,
]
最後のコンマは要らないけど、あった方が書きやすいし、勝手にヌル要素が追加されたりもしない
無視されるだけ

a = func(a, b, c,)
これも許容される
でも気持ち悪いから、多分こうは書かない
最後の余分なセパレータに対する統一的な方針は無い
828デフォルトの名無しさん (ワッチョイ ff7c-rxv+)
垢版 |
2024/09/05(木) 13:31:44.17ID:Uxm0hRsL0
>>0823
「最後にもセパレータがある」は矛盾してるよ
最後のセパレータの次には空の要素があるとみなすべき

それぞれの要素の後に記号をつける場合その記号は「ターミネータ」
記号は改行だけとは限らず「foo;bar;baz;」とかでもよい

ターミネータ式では「foo;bar;baz」は厳密には ["foo", "bar"] にゴミがついてるとみなすけど、最後の要素とみなすことも多い。それでも「foo;bar;」で最後に空の要素があるとはみなさないのでセパレータとは違う

splitやjoinはセパレータ式を扱うものだから、ターミネータ式の分割と結合に使うとき小細工が必要なのは仕方ない

>>0823 の「等価な筈なのに〜」だの「セパレータが改行のときだけ」だのも区別がついてない
「ターミネータの場合は」なの

# セパレータをカンマからタブに
csv = "foo,bar,baz"
list = csv.split(",")
tsv = "\t".join(list)

# ターミネータをセミコロンから改行に
stv = "foo;bar;baz;"
list = stv.split(";")[:-1] # 小細工
ltv = "\n".join(ltv) + "\n" # 小細工
2024/09/05(木) 14:35:40.58ID:J+Hr7uF60
セパレータなのか終端記号なのかというところに
統一的な見解を作るのは無理だろう
2024/09/05(木) 15:30:26.64ID:gQmEldZ20
>>820
yieldしたbufをclearしたらアカンやろ

>>821
偉そうなこと書いててもコードはこのレベルなのかよw
勘弁してくれよ

>>828
Pythonのoptional trailing commaとかは
ターミネータではなくセパレータだよ
文法としてそれが規定されてて
オプショナルセパレータを処理する仕組みがあるかどうか
831デフォルトの名無しさん (アウアウエー Sa1f-XN8b)
垢版 |
2024/09/05(木) 23:28:48.64ID:/+8Jbbe1a
これも終端がいい加減な例の一つ
https://5ch.net/
https://5ch.net
832デフォルトの名無しさん (ワッチョイ 5f5c-1cCN)
垢版 |
2024/09/05(木) 23:37:18.89ID:mXpnohHX0
それ終端なのかよURIの記法ってそうだっけパスの頭じゃねーの?
2024/09/05(木) 23:37:57.01ID:yOHjemdL0
urlもそうだし、パスを分解する時も、なんだこの不規則はと悩む
C:/
は/が無いと意味不明になる
でも
C:/bin/
C:/bin
はどっちもあり
ファイルとディレクトリを同列に扱いたいというスタンスからすると、末尾の/はあって欲しくない
でもルートの場合は必要
どっちかに統一しないと、
f'{path}/{filename}'
みたいに書けない
仕方ないので、あってもなくてもいいけど、あったら無視する
という汚れ仕事吸収層に任せることに
2024/09/06(金) 00:52:19.42ID:0I3gstue0
urlといいうか、*nixはスラッシュ止が本来なんだっけ?

それにしてもファイルパスは意外と厄介
rsyncみたいに、スラッシュがあるかないかで振る舞いが全く異なるものもあるし
2024/09/06(金) 00:54:13.81ID:R0hAYngZ0
最初の/は、ルートではなく絶対パスの意味
長さゼロの文字列はカレントディレクトリかなぁ

ドライブ指定のみ
C:
ドライブ指定+絶対パス指定
C:/
ドライブ指定+相対パス指定
C:.

C:/Users>cd /d D:/
D:/>cd /d C:.///.//yamada///Music//
C:/Users/yamada/Music>
となるし
836デフォルトの名無しさん (オイコラミネオ MMcb-rxv+)
垢版 |
2024/09/06(金) 08:29:25.15ID:FtlRyc/CM
>>830
820 と 828 にツッコミありがと そのとおりだね

いずれにせよ811や823の参考になればと思ったけれど
833までみるとプログラミングやPythonの勉強よりは別のことをしたいみたいだ
2024/09/06(金) 12:59:23.01ID:5V/vqJZed
もうメンテナンスしかやることねえ・・
2024/09/06(金) 13:05:03.70ID:8mJhneNM0
>>837

うん?

まぁ、そんなもんだ
839デフォルトの名無しさん (ワッチョイ 278b-k4Tl)
垢版 |
2024/09/06(金) 15:15:22.20ID:kb80ato/0
ほぼ知識ゼロの状態からPythonでアプリを作るのは無謀?
2024/09/06(金) 16:28:40.66ID:b7WWclpu0
知識ゼロにも色々あってな
プログラミング自体やったことがないのか
Pythonでやったことがないだけなのか
2024/09/06(金) 16:35:05.78ID:e4ITOx4xd
PC触ったことないとか
2024/09/06(金) 16:43:13.12ID:QtgCCsYf0
>>839

できる


どの書籍、選び方次第
843デフォルトの名無しさん (ワッチョイ 278b-k4Tl)
垢版 |
2024/09/06(金) 16:43:15.17ID:kb80ato/0
プログラミングの知識はほぼゼロ
unreal engineのC++に何が書いてあるのかわからない
コードの書き方の知識もほぼゼロ
844デフォルトの名無しさん (ワッチョイ 278b-k4Tl)
垢版 |
2024/09/06(金) 16:44:13.37ID:kb80ato/0
>>842
良い書籍や動画を教えてくれると助かる
845デフォルトの名無しさん (ワッチョイ 278b-k4Tl)
垢版 |
2024/09/06(金) 16:47:34.80ID:kb80ato/0
組みたいプログラムはオレの知る限り、おそらく一般には採用されてないけど、そんなに複雑なものでもないと思う

なので、信頼してる人しか組みたいプログラムは教えたくない
2024/09/06(金) 16:52:45.07ID:e4ITOx4xd
>>844
>>736
847デフォルトの名無しさん (ワッチョイ 278b-k4Tl)
垢版 |
2024/09/06(金) 16:56:57.72ID:kb80ato/0
>>846
ありがとう
登録した!
書籍もあると助かります
848デフォルトの名無しさん (ワッチョイ 278b-k4Tl)
垢版 |
2024/09/06(金) 16:58:56.36ID:kb80ato/0
>>846
どのリストから見れば良い?w
849デフォルトの名無しさん (ワッチョイ 278b-k4Tl)
垢版 |
2024/09/06(金) 17:01:38.70ID:kb80ato/0
UE使う時にvisual studio入れた
サッパリだったけど…
2024/09/06(金) 17:06:47.23ID:e4ITOx4xd
>>848
取り敢えずPython速習っていう2時間半の動画観て雰囲気を掴んでみては
その前にシステムの構築をしておいたほうがいいかも
851デフォルトの名無しさん (ワッチョイ 2728-k4Tl)
垢版 |
2024/09/06(金) 17:12:45.49ID:kb80ato/0
>>850
Python落として、visual studioとあと何が必要?
852デフォルトの名無しさん (ワッチョイ 2728-k4Tl)
垢版 |
2024/09/06(金) 17:15:47.84ID:kb80ato/0
↑で紹介してくれた人、書籍出してるんだな
それも買います
2024/09/06(金) 18:29:38.57ID:B348q7Ai0
Pythonとvscodeがあればその動画の内容くらいなら十分できるだろう
2024/09/06(金) 18:30:39.41ID:060imtVw0
サプー3D前の方が好き
2024/09/06(金) 19:19:30.06ID:jTHLjygZ0
>>854
本の表紙がかわいい
2024/09/06(金) 19:48:13.50ID:PgSZcrVr0
>>844
自分が勉強した順。
PaizaというサイトでPython3に関してはある程度の部分まで無料で学べる。
講座は動画、各項目毎に小テスト。
とりあえずは環境を整えなくてもオンライン上で実行環境が用意されている。
自分はそこで最低限の文法を勉強してから他の動画やネット上のソースを見たりした。
見たソースは、最初のうちは極力ソース内のあちこちに細かく「〇〇する」とか」コメントがあるもの。
そういうものを見て「あー、この部分数行でファイルを読み込むんだ」とか、
「こうやって流れを繋げていくんだ」ってのを理解した。
2024/09/06(金) 21:20:10.00ID:060imtVw0
>>855
表紙かわいい
858デフォルトの名無しさん (ワッチョイ 277a-k4Tl)
垢版 |
2024/09/06(金) 22:41:41.57ID:kb80ato/0
みんなありがとう
色々実践してみます
2024/09/07(土) 09:57:52.65ID:wncxx9TU0
>>776を作ってみた
取得した結果を入れておく場所と、見つかったかどうかのフラグと、セマフォをglobalで共有する
フラグは本当は呼び出し側で処理したかったけど、result()を得ようとしたら終了待ちするので意味がない
履歴を記録しておくファイルもあって、その都度開いて追記して閉じる
他のスレッドと衝突しないかどうかは運次第
2024/09/07(土) 10:13:06.85ID:frLS0o200
スレッドじゃなく別プロセスでやればええんでは
ライブラリが行うプールの管理だけで済む
2024/09/07(土) 11:35:00.37ID:vd/lqcQo0
それな
おれも普通にプロファイル作ってるわ
ただ1プロファイルにつきたしか600MBくらい使ったけど
2024/09/07(土) 12:27:26.22ID:wncxx9TU0
プロセスを別にするのは重い計算とかでCPUコアを分けたい時で、
ネットワークの待ち時間の間に他のことをしたいだけなのでスレッドでいい
2024/09/07(土) 13:58:10.84ID:j/xwjrvk0
>>859
そんなことしなくてもselenium grid使えば全部自動でやってくれるぞ
自前実装したいのなら勝手にやればいいけど
2024/09/07(土) 16:04:12.37ID:frLS0o200
>>862
マイコンやキオスク端末ならわかるけど
デスクトップOSなんてプロセス無数に動いてる
コンテキスト切り替えが多発したりリソース気にするんじゃなけれりゃ
たいしてスレッドにこだわる意味はない
Chromeもプログラム構成優先してがんがんプロセス生成してる
2024/09/07(土) 16:47:27.15ID:wncxx9TU0
別に拘りは無い
どっちでも同じ
コード上もThreadPoolExecutorをProcessPoolExecutorと書き換えるだけ

実際の中身の処理はかなり変わるけど、どっちにしろ待ち時間が大半なので何も変わらない
processである必要が無いのにprocessにしてあると、なんで???と思われるだけ
2024/09/07(土) 18:09:51.60ID:Zt7rxXUV0
seleniumは並行に大量のページにアクセスするのには向かない
I/O待ちでもブロッキングするしかなくセッション単位で別のブラウザーインスタンスが必要だからリソース馬鹿喰い

今は代替ツールがあるので新しく書くコードならそっちを使う
2024/09/07(土) 18:49:21.06ID:wncxx9TU0
seleniumは多重処理関係なく重いというか大げさだけどね
本物のブラウザそのものだし

互換品や簡易版で動くようなサイトなら、最初からrequestsで済ませるけど、
本物じゃないと動作が怪しいなら本物を使うしかない
2024/09/07(土) 19:00:23.61ID:zesuODdH0
はやさなら
パンダ<美汁<セレン
2024/09/07(土) 19:01:17.02ID:zesuODdH0
間違った反対
2024/09/07(土) 19:14:37.88ID:wncxx9TU0
重いだけで済むんだから楽なもん
perlでmechanizeとか紹介されてて、なんか便利そうだと思って使ってみても、
便利でも何でもない
スクリプトとかあったら人間が解析しないといけない

selenium使ってさえ、取得したpage_sourceがスクリプトの塊で、
謎に分割されてたり、jsonっぽいけどjsonじゃなかったり、
スクレイピング避けのいたちごっこが続いている
2024/09/07(土) 19:18:50.68ID:zesuODdH0
デスクトップ上の座標でクリックしてけばいい
2024/09/07(土) 21:26:28.97ID:o9ae9Qt50
seleniumでウェブの操作を行うプログラムを持っているのですが、おそらくグーグルchromeのアップデートが原因で動かなくなりました
実行後、何も処理せずに落ちてしまうのでエラー内容すら見られません
chromeのバージョンは128.0.6613.120
chromeドライバーのバージョンは128.0.6613.119の32bitです
ドライバーを旧バージョンから最新バージョンに上書きするだけではダメなんですかね?
2024/09/07(土) 21:29:26.91ID:wncxx9TU0
実際に使ってるブラウザとseleniumのドライバを合わせないといけない
みたいな努力は割と前に不要になった
2024/09/07(土) 22:06:17.62ID:o9ae9Qt50
エラーのスクショが撮れました
何が悪いのか分かる方いたらご教示お願いします
https://i.imgur.com/Jqpd9a5.png
2024/09/07(土) 22:08:24.32ID:wncxx9TU0
from selenium import webdriver
with webdriver.Chrome() as driver:
みたいに書く
2024/09/07(土) 22:22:51.02ID:o9ae9Qt50
>>875
その2行目を付け足したら速攻で落ちるようになりました…
webdriver.Chrome()の()の中に、
エラー画像の4行目のservice=ChromeServiceなんたらかんたらをいれるのかな?とよく分からないながらやってみても変わらず
2024/09/07(土) 22:28:17.17ID:2iOJWTB70
>>867
>>866に書いてること1ミリも理解してなくて草

普通にブラウザ使ってれば
あるサイトのリクエスト完了を待ってる間に
違うタブで別サイトにリクエストを出すことができることくらいはわかるよね?

seleniumではそれが出来ない
同じことを達成したければ一つ一つ別プロファイル作って
専用のブラウザインスタンスを立ち上げないといけない

seleniumだけでなくrequestsもmechanizeも全部非同期に対応してないので
量をさばく必要がある場合に使う道具ではなくなってる
2024/09/07(土) 22:39:22.70ID:o9ae9Qt50
>>872のソースはこれです
コードは極力削っています
https://i.imgur.com/kgfDXeE.png
2024/09/07(土) 23:50:08.25ID:57KCZCA60
>>878
同じバージョンだけど動いてyahoo見れるな…
2024/09/08(日) 03:12:08.34ID:5mVESwIRr
>>879
マジですか…
数か月くらい動かしていない期間があって、久しぶりに昨日動かそうとしたらエラーが出て…
WinError 193の対処法として紹介されていた、
service = ChromeService(ChromeDriverManager().install())によって作成されるChrome Driverのキャッシュを消すというものも効果なし
それ以外のエラーはよく分からず
2024/09/08(日) 09:00:49.72ID:6sSIgrGd0
>>880
その記述って自動で適切なChromeDriverをダウンしてきてくれるみたいだけど、出てるエラーはChromeDriverと合ってないから実行できないよ、っていう事らしい。
自動で上手くいかずキャッシュを消してもダメなら自動を止めて、ChromeDriverの各バージョンを片っ端から手動でダウンして試してエラーの出ないchromedriver.exeをどこかのフォルダに置いといて直接指定すれば良いのでは?と思うけどそれじゃダメなの?
2024/09/08(日) 11:55:48.02ID:r0meOORq0
>>874
webdriver_managerのバージョンも最新に
2024/09/08(日) 16:48:39.72ID:FaHdpY160
それね
俺も先月業務アプリが動かなくて困った記憶あるわ
結論から言うとwebdriver_managerはもういらない
selenium単独で自動的に最新のdriverを取得することができるみたい

```
from selenium import webdriver

options = webdriver.ChromeOptions()
'''オプションがあれば追加'''
options.add_argument('--start-maximized')

driver = webdriver.Chrome(options=options)

try:
driver.get("http://google.co.jp";)

except Exception as e:
print(e)

finally:
driver.quit()
```
2024/09/08(日) 16:55:04.68ID:FaHdpY160
ちなみにSeleniumバージョン4.6以上が必要らしいので注意ね

ここを参考にするといいよ
https://yuki.world/python-selenium-chromedriver-auto-update/
885デフォルトの名無しさん (ワッチョイ 911d-sF61)
垢版 |
2024/09/08(日) 18:21:21.76ID:ZvPXoPz+0
>>839
で色々とアドバイスもらった者です

サプーさんの書籍も購入したんだけど,ある程度、初心者を抜けるか抜けないかの人向けだね、これ

ほんとにプログラミングについては知識ゼロなので、動画以外でこの前段階の超入門書みたいなのでオススメあれば教えていただきたい
■ このスレッドは過去ログ倉庫に格納されています