をPython
使用して最初のWebスクレイピングプロジェクトを実行しようとしていますFirefox
。私はとを使用Python version 3.7.4
していFirefox Developer 71
ます。どちらも64ビットで、私はを使用していWindows 10
ます。
問題は、を介してこのフォームコントロールにアクセスしようとしていることpython
です。最終的には、フォームコントロールにテキストを挿入してから、結果をWebスクレイピングしたいと思います。ただし、オブジェクトを取得するのが難しいため、現時点ではオブジェクトをクリックしようとしています。
これが私のコードです:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
import time
driver = webdriver.Firefox()
driver.get("https://www.website.com/login/")
jcode_form = driver.find_element_by_id('ndcCode')
hov = ActionChains(driver).move_to_element(jcode_form)
time.sleep(6)
hov.click()
hov.perform()
私が受け取っているエラーは次のように述べています。
WebDriverException:メッセージ:TypeError:rect isundefined
私が操作しようとしているオブジェクトは、上部のフォームコントロールです。
アクションチェーンとスリープ機能を使用してさまざまな方法でこれをトラブルシューティングしようとしましたが、エラーメッセージが表示され続けます。
どんな助けや提案も大歓迎です。ありがとうございました。
ここではsend_keys()
、Javascript、または両方の組み合わせなど、いくつかの異なることを試してみます。まず、ロケーターをよりユニークなものに変更したいと思います。IDndcCode
はページ上で複数回使用される場合と使用されない場合があり、複数の要素を見つけると、予期しない結果がスローされます。これは次のように確認できます。
elements_count = driver.find_elements_by_id("ndcCode")
print(str(len(elements_count))
「1」が出力されない場合は、ロケーター戦略をより具体的なものに更新する必要があります。とにかく、次のコードサンプルには更新された戦略を使用します。
最初のアプローチは単純で、click()
その後にsend_keys()
:が続きます。
jcode_form = driver.find_element_by_xpath("//input[contains(@placeholder, 'Start typing a Code, Drug, Product')]")
jcode_form.click()
jcode_form.send_keys("someText")
これは最も基本的なアプローチですが、最初にこれを除外するのが最善です。次に、Javascriptアプローチを試して、同じアクションを実行します。
jcode_form = driver.find_element_by_xpath("//input[contains(@placeholder, 'Start typing a Code, Drug, Product')]")
driver.execute_script("arguments[0].click();", jcode_form) # perform click
driver.execute_script("arguments[0].value = 'someText';", jcode_form) # set the value
これらのコードサンプルのいずれかを試した後、あなたの結果を聞くことに興味があります。それらがうまくいかない場合は、この回答にコメントして、発生しているエラーをお知らせください。可能であれば、これらのコードサンプルのデバッグとテストを試みることができるように、テスト対象のURLを確認したいと思います。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加