2016-09-17 2 views
2

私は出席登録を自動化するためにPythonセレンを使用しています。うまくいっていたので、ソースコードを変更してみたかったのです。私はそれがdriver.execute_script()を使用して変更することができ、それはJavaScriptのために働くことができると述べているいくつかの投稿を見ましたが、私の場合、selectタグのもとでソースコードを変更する必要があります。私はinspect elementを使ってソースコードを修正することができました。以下はselectタグのソースコードです:Pythonセレン - ウェブページのソースコードを変更する

<select name="date1"> 
    <option value="2016-09-17">2016-09-17</option> 
    <option value="2016-09-16">2016-09-16</option> 
    <option value="2016-09-14">2016-09-14</option> 
</select> 

私はdriver.execute_script()でそれを実行しようとしました。以下は、私のコードだった:

sel = driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/form/table/tbody/tr[2]/td[3]/select') 
input_list = sel.find_element_by_tag_name('option') 
cmd = "input_list.value = '2016-09-07'" 
driver.execute_script(cmd) 

しかし、上記のコードは私に次のエラーを与えている:

selenium.common.exceptions.WebDriverException: Message: input_list is not defined

私はinspect elementウィンドウを使用してソースコードを変更することができています。セレンを使用してソースコードを変更する方法はありますか?

答えて

0

は解決策を以下試してみて、問題が発生した場合はお知らせください:

driver.execute_script("""document.querySelector("select[name='date1'] option").value="2016-09-07";""") 

P.S.セレクタでは絶対XPathを使用しないでください。代わりに相対

+0

ありがとうございました。出来た。コードに小さな誤りがありました。私はそれを編集しました。 – Jeril

2

問題は、execute_scriptがPythonスクリプトのPython変数について何も知らないブラウザ[1]の中でJavaScriptを実行することです。特に、input_listはPython変数であるため、JavaScriptでは定義されていません。

これを修正するには、JavaScriptファイル内の要素を選択します。これを行うには、このような何かにあなたのCMDを設定することができます[2]:

function getElementByXpath(path) { 
 
     return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; 
 
    } 
 

 
    getElementByXpath("/html/body/div[3]/div/div[2]/form/table/tbody/tr[2]/td[3]/select/option[1]").value = '2016-09-07';
<html> 
 
    <body> 
 
    <div></div> 
 
    <div></div> 
 
    <div> 
 
     <div> 
 
     <div></div> 
 
     <div> 
 
      <form> 
 
      <table> 
 
       <tbody> 
 
       <tr></tr> 
 
       <tr> 
 
        <td></td> 
 
        <td></td> 
 
        <td> 
 
        <select name="date1"> 
 
         <option value="2016-09-17">2016-09-17</option> 
 
         <option value="2016-09-16">2016-09-16</option> 
 
         <option value="2016-09-14">2016-09-14</option> 
 
        </select> 
 
        </td> 
 
       </tr> 
 
       </tbody> 
 
      </table> 
 
      </form> 
 
     </div> 
 
     </div> 
 
    </div> 
 

[1] https://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webdriver.WebDriver.execute_script

[2] Is there a way to get element by Xpath using JavaScript in Selenium WebDriver?

+0

ありがとうございます。アンダーソンが提案したスクリプトはJavaScriptを追加することなく動作しました。 – Jeril

関連する問題