質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

211閲覧

seleniumのCORSの無効化、できそうだけどセキュリティ的に大丈夫?

ikevo

総合スコア5

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2025/04/22 14:38

実現したいこと

pythonのseleniumで、chromeを使って、フリマサイトの出品を検索したい。
地区は東京の上位5件がヒットするようにしています。
制約条件
①ジモティーはjavascriptで動的に変わる
②chromeのウェブドライバーが自動でダウンロードされるが、最新のものに対応していない。
(手動でやるのは面倒なので一度ここはスキップ)
③webdriver.version '4.31.0'
④windos10 home celeron

発生している問題・分からないこと

発生している問題
①最初の関門、保護されていない通信とあり、urlにdata:;と記載されている。ここで念のため進んでいない。
②第2の関門、発生するであろう問題で、その他optionsに追加したほうがいい設定がわからない。

該当のソースコード

from webdriver_manager.chrome import ChromeDriverManager from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException from selenium.webdriver.chrome.options import Options options = Options() #Optionsで詳細オプションを追加するためのインスタンス options.add_argument('--ignore-certificate-errors') # SSLエラー無視 #options.add_argument('--allow-insecure-localhost') # ローカルへの接続許可 options.add_argument(r"--user-data-dir=C:\Users\<ユーザー名>\AppData\Local\Google\Chrome\User Data")#ここが重要? options.add_argument(r"--profile-directory=Default") # 通常のプロファイル名(たとえば "Profile 1" など) options.add_argument('--disable-web-security') #ここが重要? #options.add_argument('--disable-gpu') options.add_argument('--no-sandbox') #options.add_argument('--disable-dev-shm-usage') #options.add_experimental_option('excludeSwitches', ['enable-logging']) options.set_capability("acceptInsecureCerts", True) keyword = "冷蔵庫"#調べたいもの url = f"https://jmty.jp/tokyo/sale?keyword={keyword}" # Chromeを自動でセットアップして起動 d = webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=options) try: wait = WebDriverWait(d,20) #20秒間に設定して、ロード中でも20秒で待機終了  items = wait.until(lambda d: d.find_elements(By.CSS_SELECTOR, ".p-item-title") if len(d.find_elements(By.CSS_SELECTOR, ".p-item-title")) >= 5 else False) #ここわかりにくいけど一行 #p-item-titleはジモティーの各商品のタイトルで5件以上ならすべて表示としています。 for item in items: print(item.text) link = item.get_attribute("href") print(f"リンク: {link}") except TimeoutException: print("商品が5件以上見つかりませんでした。") d.quit()

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

webdriverでの自動インストールは、.wdm\drivers\chromedriver\win64\135.0.7049.95のバージョン、実際のクロームは135.0.7049.96
①最初の関門で--user-data-dir= をオプションに追加すれば、data:;と表示されて、
空のhtml形式で開く状態を防げるかもしれないですが、あっていますか?

②第2の関門
chatgptとquitaで調べると、corsを無効にする方法が記載されていたため、
https://qiita.com/t_katsumura/items/3f2a401ff6e2076acb26
options.add_argument('--disable-web-security') のことだろうと推察しています。

またウェブ関連をあまり学んでいませんが、調べた結果、

chromeのブラウザが、Origin: http://localhost:8080とヘッダーに情報を付けてくれる

  • ②ジモティーのサーバー側のレスポンスで、許可された場合にヘッダーに追加 

Access-Control-Allow-Origin:http://localhost:8080
許可されていない場合
Access-Control-Allow-Origin:https://jmty.jp or []

  • ③Chrome(ブラウザ)でのチェック

Origin(リクエスト側) === Access-Control-Allow-Origin(レスポンス側) とcorsのエラーチェック
結果許可されない場合、レスポンスヘッダーのオリジンが違うからブラウザ側で表示されない可能性があるということですよね?
これらを解決するために、--user-data-dir、--disable-web-securityをオプションに追加して、
実行すればできると思うのですが、これってセキュリティ的に大丈夫ですか?
またsandboxもオプションに追加したほうがいいですか?
またoriginを置き換えるのはセキュリティ的に不可とでて、やるならプロキシサーバー経由でなければできないと出てきまし。
AIでは非常に危険と書いていたために、できるならローカルでの開発で、自作ウェブアプリにスクレイピングする用だと書いていますが、このままでできそうですか?セキュリティ的に気を付けることを教えていただければ幸いです。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YT0014

2025/04/24 08:13 編集

コメント削除(重複、かつ、詳細なコメントが投じられたので)
melian

2025/04/24 07:57

ジモティーの利用規約には「ユーザーは投稿等をクロール等で自動的に収集、解析する行為を行ってはならないものとします」と書かれていますので、その点を考慮されることをお勧めします。 利用規約|ジモティー https://jmty.jp/about/terms > 第2章 投稿等・取引等に関する規約 > 第1節 投稿等に関する規約 > 第2.1.3条(投稿等に関するその他の事項等) > > 6. 当社は、本サービス上で当社が定める方法でユーザー自身が許可した場合を除き、本規約に基づく投稿等の利用を、ユーザー自身を除く、他のユーザーその他の第三者に許諾するものではなく、ユーザーは他のユーザー等の投稿等の権利を侵害する行為を行ってはならないものとします。また、ユーザーは投稿等をクロール等で自動的に収集、解析する行為を行ってはならないものとします。
guest

回答1

0

開発中のローカル環境で一時的に使う時は良いかなと思います。ただその際も、テスト専用のもので起動し影響がない場合ですが。
--disable-web-security は使わずに回避策を取れるなら、そっちを選んだ方が良いかなと思います。

投稿2025/04/24 07:49

peyo

総合スコア69

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問