bugfix> javascript > 投稿

主にjavascriptで実行されているWebサイトをスクレイプしようとしていますが、javascriptがわからないため、頭痛の種です。

これは私がこれまでに持っているものです:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.keys import Keys
binary = FirefoxBinary(r'C:\Users\kwright\AppData\Local\Mozilla Firefox\firefox.exe')
driver = webdriver.Firefox(firefox_binary=binary)
driver.get('http://www.papowerswitch.com/shop-for-electricity/shop-for-your-home')
#zipcode = driver.find_element_by_id('edit-zipcode')
monthlyuse = driver.find_element_by_name('estimated-monthly-usage')
button = driver.find_element_by_id("edit-submit-residential-rate-search2")
driver.execute_script("document.getElementById('edit-zipcode').value='18707'")

これは正常に機能し、郵便番号セクションで必要な値を提供します。 ID名が一意ではないために問題がある次の部分は、名前タグですが、私の問題は、名前タグによって要素を取得し、必要なデータを入力するjavascript関数がわからないことです。

私はこれとこれのいくつかのバリエーションを試しましたが、うまくいきませんでした。

driver.execute_script("driver.findElement(webdriver.By.name('estimated-monthly-usage')).value='1000'")

誰でもここで私を助けて、フォームのその部分を記入するために追加する必要があるスクリプトを教えてもらえますか?ありがとうございました。

編集: ここにHTMLがあります   毎月の使用

回答 1 件
  • driver.findElement  はセレン 構文、 driver.execute_script 内  あなたが必要JavaScript 構文:

    driver.execute_script("some javascript code comes here");
    
    

    適切な関数を見つけるには、ドキュメントDOMオブジェクトを見てください: document.getElementById のように 、以前に使用した、 document.getElementsByName() があります  関数。 1つの要素のみを返すことができるIDとは異なり、同じ名前の要素が多数存在する可能性があるため、関数はそれらをすべて配列として返すことに注意してください。あなたの声明は次のようになります:

    driver.execute_script("document.getElementsByName('estimated-monthly-usage')[0].value='1000'");
    
    

あなたの答え