• ベストアンサー

Python codeで何と書けば良いのか?

Pythonで株価検索のWebScrapingをSeleniumWeb Driverを使ってCoding しています。 添付の画面で、自動的に”同意する”が選択出来るようにしたいのですが、うまく行きません。私は driver.find_element(By.NAME,"同意します").Click() 等々いろいろ試したのですが、どれもダメでした。 どう記せばよいのでしょうか、教えていただければ有難いです。

  • Python
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • gyokusei
  • ベストアンサー率80% (4/5)
回答No.2

from selenium import webdriver from selenium.webdriver.common.by import By # ブラウザーの起動 driver = webdriver.Chrome() # ページのロード driver.get("https://example.com") # チェックボックスのラベルを指定して要素を取得 checkbox = driver.find_element(By.XPATH, '//label[contains(text(), "同意する")]/preceding-sibling::input') # チェックボックスをクリック checkbox.click() 上記のコードでは、find_elementメソッドで、XPathを使用してラベルに基づいてチェックボックスの要素を取得しています。click()メソッドを使用して、要素をクリックしています。 上記のコードを使ってみてください

momochan1128
質問者

お礼

本当にありがとうございます。 お示し頂いたXPATHを使う方法を試しましたが下記のようなエラーが出ました。 selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//label[contains(text(), "同意する")]/preceding-sibling::input"} (Session info: chrome=111.0.5563.65) 最終行の (Session info: chrome=111.0.5563.65)が気にかかります。 Chromeは110と思っていましたが、111にUpdateされており、例によってChromDriverとのVersionの不一致に起因するものかも知れません。ChromeDriverを更新してもう一度トライして見ます。その結果を再度、お知らせします。 取り急ぎお礼を申し上げます。

momochan1128
質問者

補足

ChromeとChromeWebDriverのVersionを合わせましたがダメでした。貴方がいろいろ解決策を示してくれたので、もう少し自身で頑張ってみます。

その他の回答 (1)

  • gyokusei
  • ベストアンサー率80% (4/5)
回答No.1

Selenium Web Driverを使用して、"同意する" チェックボックスを選択するには、次のようにコードを記述することができます。 # 必要なライブラリをインポート from selenium import webdriver from selenium.webdriver.common.by import By # WebDriverを起動し、ページを開く driver = webdriver.Chrome() driver.get("https://example.com") # "同意する" チェックボックスを選択する checkbox = driver.find_element(By.ID, "agree-checkbox") checkbox.click() 上記のコードでは、 driver.find_element(By.ID, "agree-checkbox") で "同意する" チェックボックスを探し、 checkbox.click() でクリックして選択します。実際のサイトのHTMLコードによっては、チェックボックスの選択方法が異なる場合がありますが、通常、 find_element() メソッドを使用して、ID、クラス名、または要素の名前で要素を検索することができます。

momochan1128
質問者

お礼

回答ありがとうございます。 # "同意する" チェックボックスを選択する→この方法は driver.find_element(By.ID,"*******")やdriver.find_element(By.Name,*******)であることは想像つくのですが、この******の部分に具体的に何が入るのかが解らないのです。貴方の書かれている"agree-checkbox"に相当するのは私の添付ファイルで示したelementでは、”同意します"や”Accept"のように思えるのですが、By.IDでもBy.Name"でもエラーになります。"agree-checkbox"に相当するelementを具体的に示して頂けませんか?"

関連するQ&A

  • pythonでエクセルにコピペできない

    pythonでWebページにログインし、レポートを全選択して エクセルにペーストしたいのですが、エクセルにペーストできないです。 どのように修正したら良いのでしょうか? よろしくお願いします。 【確認したこと】 1.エクセルは更新履歴が変わっているので、開いて保存はしている。 2.プログラム終了後、手動でエクセルを開いてctrl+vするとコピーした値をペーストできる。(クリップボードにはコピーされている) 3.新規エクセルで試してもペーストできない。 import time import chromedriver_binary import pyautogui import openpyxl from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome import service wb = openpyxl.load_workbook("./BOS_Data.xlsx") #WEBブラウザの起動 driver = webdriver.Chrome() #自動ログインしたいウェブサイトのURLをコピペ driver.get('https://xxx/Login/default.asp') USER = 'o2' PASS = 'M3' my_id = driver.find_element(By.NAME, 'sUserName') password = driver.find_element(By.NAME, 'sPassword') submit_btn = driver.find_element(By.NAME, 'submit') #自動入力したIDとパスワードを入力 my_id.send_keys(USER) password.send_keys(PASS) #ログインボタンを自動入力 submit_btn.click() #Reportをクリック driver.find_element(By.XPATH, '/xxxxxxxx).click() #全選択して、コピー pyautogui.hotkey('ctrl', 'a') pyautogui.hotkey('ctrl', 'c') #すでに存在するExcelワークブックを読み込み、ペーストして保存 wb = openpyxl.load_workbook("./BOS_Data.xlsx") ws = wb['Sheet1'] wc = ws['A1'] pyautogui.hotkey('ctrl', 'v') time.sleep(3) wb.save("./BOS_Data.xlsx")

  • pythonのfor文のエラーについて

    現在pythonでwebスクレイピングの勉強をしている者です。 質問があるのですが、 from selenium import webdriver browser=webdriver.Chrome() browser.get("https://movie.jorudan.co.jp/cinema/") #クラスからリンクを抜き出してクリックさせる。 siwake=[] elems=browser.find_elements_by_class_name("item-body") for i in elems:  elem=i.find_element_by_tag_name("a")  elem.click() #クラスのジャンルからaタグのテキストを抜き出して前のページに戻る。  elem=browser.find_element_by_class_name("genre")  elem=elem.find_element_by_tag_name("a").text  browser.back()   #抜き出した情報をsiwakeの空のリストに追加する。  siwake.append(elem) 上記のコードで映画のジャンルの一つ目を抜き取りたいのですが、for文を回すとエラーが出てしまいます。 エラーとしては、 elems=browser.find_elements_by_class_name("item-body") for i in elems: ……→elem=i.find_element_by_tag_name("a") 上の一文がエラーとして出てきます。 また、一番下にはMessage:stale element reference: element is not attached to the page document という表記が出てきます。   どなたか原因が解る方がいらっしゃいましたらご教示して頂けると幸いです。 参考HPはhttps://movie.jorudan.co.jp/cinema/です。 よろしくお願い致します。

  • pythonのfor文のエラーについて

    現在pythonでwebスクレイピングの勉強をしている者です。 質問があるのですが、 from selenium import webdriver browser=webdriver.Chrome() browser.get("https://movie.jorudan.co.jp/cinema/") #クラスからリンクを抜き出してクリックさせる。 siwake=[] elems=browser.find_elements_by_class_name("item-body") for i in elems: elem=i.find_element_by_tag_name("a") elem.click() #クラスのジャンルからaタグのテキストを抜き出して前のページに戻る。   elem=browser.find_element_by_class_name("genre") elem=elem.find_element_by_tag_name("a").text browser.back()   #抜き出した情報をsiwakeの空のリストに追加する。 siwake.append(elem) 上記のコードで映画のジャンルの一つ目を抜き取りたいのですが、for文を回すとエラーが出てしまいます。 どなたか原因が解る方がいらっしゃいましたらご教示して頂けると幸いです。 参考HPはhttps://movie.jorudan.co.jp/cinema/です。 よろしくお願い致します。

  • python codeが 実行出来ない

    簡単なテスト用のpython code(sample.py)を実行するのにエクスプローラーから選択しダブルクリックで立ち上げるとVisual studio codeが立ち上がり、実行できるのですが、Visual Studio Codeを立ち上げ、フォルダーを選択し、そこからsample.pyを実行すると添付図の状態となり、エラーメッセージもなく停止状態になります。 他の****.pyを選択して実行しても同様です。 一度、当該フォルダーを閉じ、別のフォルダーを開いた場合、複数の***.pyがあっても、選択して、夫々実行可能となります。 この例示のch8フォルダーが壊れているという状態ではありません。 何が原因と考えられますか?

  • pyhonでweb操作(imageをクリック)

    pythonでweb操作をしたいです。 Chromeでログインするところまではできましたが、 クリックする箇所がimgになっており、どうやってクリックするのかわかりません。 色々調べてみたのですが、xpathを使っても下記のエラーが表示されます。 【エラー内容】 AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath' 【コード】 driver.find_element_by_xpath('//input[@type="image"][@src="/images/btnOrders.gif"]').click() 【画像のElements】 <a href="/Includes/SetMenuType.asp?MenuType=1"><img border="0" src="/images/btnOrders.gif"></a> 【Copy full Path】 /html/body/table/tbody/tr[4]/td[2]/a[1]

  • PythonのAPI使用について

    PythonでAPIを用いて情報を取得する練習をしています。 ---------------------------------------------- import urllib2, sys import xml.etree.ElementTree as etree try: railcode = sys.argv[1] except: railcode = '11302' resp = urllib2.urlopen('http://www.ekidata.jp/api/l/%s.xml'%railcode).read() output = {} tree = etree.fromstring(resp) ---------------------------------------------- 山手線のデータを取得し、tree構造を作ろうとしています。 おそらく、treeの中に'ekidata'があり、'line'と'station'のそれぞれのデータが入っていると思うのですが、それぞれのデータをどうやって表示させるのかがわかりません。 ---------------------------------------------- for e in tree: print e print e.tag print e.text ---------------------------------------------- としてみたところ、 ---------------------------------------------- <Element 'line' at 0x10caa0790> line <Element 'station' at 0x10caa0a50> station <Element 'station' at 0x10caa0bd0> station <Element 'station' at 0x10caa0d50> station <Element 'station' at 0x10caa0ed0> station <Element 'station' at 0x10caa5090> station (続く) ---------------------------------------------- のようになり ---------------------------------------------- for e in tree[1]: print e print e.tag print e.text ---------------------------------------------- のようにtreeの一つを選択すると ---------------------------------------------- <Element 'station_cd' at 0x10a06ba90> station_cd 1130201 <Element 'station_g_cd' at 0x10a06bad0> station_g_cd 1130201 <Element 'station_name' at 0x10a06bb10> station_name 大崎 <Element 'lon' at 0x10a06bb50> lon 139.728439 <Element 'lat' at 0x10a06bb90> lat 35.619772 ---------------------------------------------- のようにそれぞれの情報がでてきます。 各treeに収納されているであろうそれぞれの駅のデータから、駅名だけを取り出したりしたいと考えています。 treeの構造がわかっていないことが大きいかもしれません。 何かヒントを与えていただければうれしいです。 よろしくお願いします

  • CD-ROMからプログラムをインスト-ルできません。お助け下さい。

    東洋経済社の株価CD-ROMをインストールしようと思ったのですが、何度やってもインストールできません。手順としては、 (1)『株価CD-ROM』を、コンピューターのCD-ROMドライブにセットします。 (2)WINDOWSのスタートボタンを押し、『マイ・コンピューター』を選択します。 (3)『株価チャートCD-ROM』をセットしたCD-ROMドライブのアイコンをダブルクリックします。 (4)『SETUP.EXE』のアイコンをダブルクリックします。 (5)『ようこそ』の画面が表示されたら、『次へ』をクリック。 (6)『株価チャートCD-ROM』の使用許諾書が表示され、同意していただける場合は、『はい』をクリック。 と以下諸々と続くのですが、(4)をクリックしても(5)の画面へと進みません。原因は、どういうことが考えられるのでしょうか。どうにかして強制的にインストールする方法はありませんか。大変困っています。どなたか、お助け下さい。宜しくお願い致します。 ちなみに、パソコンは、半年前に買ったばかりで、DVDは普通に見れます。

  • windowsのpicturesに保存してある写真をemailで添付し

    windowsのpicturesに保存してある写真をemailで添付して送りたいのですが、以前は 電子メールで送信するをクリックし、画像の大きさを選択すると自動的に添付された新規メールが立ち上がってきていたのが、急に立ち上がらなくなりました。画像の大きさの選択の画面までは出てきます。 どうすれば添付できるようになるのでしょうか?

  • フォームについて

    お世話になります。 フォームについての質問なんですが、例えば、↓のようなフォームがあったとします。 <form> <input type="radio" name="sample" value="同意する">同意する <input type="radio" name="sample" value="同意しない">同意しない <input type="button" value="同意して申し込む" onClick="location.href='http://www.google.co.jp/'"> </form> このフォームは「同意する」「同意しない」の選択にかかわらず、「同意して申し込む」をクリックすればgoogleのトップページが開きます。これを、「同意する」を選択していないと、googleのトップページが開かないようにしたいのです。「同意しない」が選択されていたら、動作しないようにしたいです。分かりにくい説明かもしれませんが、どうぞよろしくお願いします。

    • ベストアンサー
    • HTML
  • macでJythonの文字コードについての質問です

    Javaを独学で齧った程度で、特にPythonはつい最近知ったばかりのため、質問の仕方が的を射ていないかもしれませんが、質問が足りていなければ、補足したり、試しますので、お答え頂けると嬉しく思います。 使用しているmacは MacBookPro,13-inch, Early 2011 MacOS 10.7.1 使用してるIDEはEclipseです。 JavaとJythonでやりとりをする際の文字コードについての質問です。 JVMで動くゲームを作ろうと思いまして、一番変更の多い部分にJythonを使ってみたく、 http://www.jython.org/downloads.htmlより、Jython 2.5.2をダウンロードし、指示に従って順繰りにインストールをしました。 その後、Javaプロジェクトを作成し、「外部アーカイブの追加」より、インストールした際に出来た、jython.jarを追加し、 また、EclipseでPyDevを入手し、設定の「Interpreter - Jython」には、同様のjython.jarを通しました。 Eclipseの環境設定→ワークスペース、のテキスト・ファイル・エンコードはデフォルトの(SJIS)になっています。 この環境で、JythonがJavaとどのようにやり取りするのか、色々と試そうと思ったのですが、 スクリプトの文頭に#coding:Shift_JIS、また#coding:SJISなどと入れ、 #coding:Shift_JIS print "あああ" という風にして、javaから PythonInterpreter pi = new PythonInterpreter(); pi.execfile("script/test.py"); と言った形で呼び出すと、 Exception in thread "main" LookupError: unknown encoding 'shift_jis' といったエラーが出てしまいます。 #coding:Shift_jisの下りを入れなかった場合は Exception in thread "main" SyntaxError: Non-ASCII character in file 'script/test.py', but no encoding declared; see http://www.python.org/peps/pep-0263.html for details になります。 ただ、Eclipseの実行をスクリプトだけに焦点をあてている場合は(分りづらい書き方かと思いますが、スクリプトのファイルを選択した状態で実行をするという感じの場合は)、問題なく実行されます。#coding:Shift_JISを書かなければ、SyntaxErrorになります。"SJIS"でも同じでした。 日本語を使わなければ、pi.execfileで読んだり、execで関数を実行したり、 pythonから整数型や英数字のみの文字列を、javaのクラス変数やインスタンス変数に代入して、それをjavaから確認したりすることは出来ます。 また、インストールしたJythonのフォルダのある、User/ユーザ名/jython2.5.2/jython(UNIX実行ファイル) をダブルクリックして出るターミナル画面から、 >>> unicode("ああああ","Shift_jis") と入力しても、 Traceback (most recent call last): File "<stdin>", line 1, in <module> LookupError: unknown encoding 'shift_jis' というエラーが出ます。 どうにかして日本語を、可能ならShift_JISで使っていきたいのですが、こういった開発環境にプラスαをしたこと自体初めてなため、 自力でどうすれば解決できるのかわからず、途方にくれています。 拙い質問ですが、解決方法をご教授頂けると、とても嬉しく思います。

    • ベストアンサー
    • Mac