2016-09-17 98 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在瀏覽器內部執行JavaScript [1],它對python腳本中的python變量一無所知。特別是input_list沒有爲JavaScript定義,因爲它是一個python變量。

要解決這個問題,您可以選擇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

非常感謝,但由Anderson建議的腳本沒有任何額外的JavaScript工作。 – Jeril